<?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>191548</bug_id>
          
          <creation_ts>2018-11-12 09:29:38 -0800</creation_ts>
          <short_desc>Enable JIT on ARM/Linux</short_desc>
          <delta_ts>2018-11-21 03:04:22 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>191256</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dominik Inführ">dominik.infuehr</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>dominik.infuehr</cc>
    
    <cc>guijemont</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>saam</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1477593</commentid>
    <comment_count>0</comment_count>
    <who name="Dominik Inführ">dominik.infuehr</who>
    <bug_when>2018-11-12 09:29:38 -0800</bug_when>
    <thetext>Enable JIT on ARM/Linux</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1477594</commentid>
    <comment_count>1</comment_count>
      <attachid>354562</attachid>
    <who name="Dominik Inführ">dominik.infuehr</who>
    <bug_when>2018-11-12 09:32:54 -0800</bug_when>
    <thetext>Created attachment 354562
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1478046</commentid>
    <comment_count>2</comment_count>
    <who name="Dominik Inführ">dominik.infuehr</who>
    <bug_when>2018-11-13 10:26:34 -0800</bug_when>
    <thetext>This patch enables the baseline JIT on ARM/Linux. It also contains patch https://bugs.webkit.org/show_bug.cgi?id=191256, since that hasn&apos;t been reviewed yet. It probably makes sense to land them separately.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1480384</commentid>
    <comment_count>3</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-11-19 22:18:49 -0800</bug_when>
    <thetext>Could you rebase the patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1480422</commentid>
    <comment_count>4</comment_count>
      <attachid>355322</attachid>
    <who name="Dominik Inführ">dominik.infuehr</who>
    <bug_when>2018-11-20 01:06:44 -0800</bug_when>
    <thetext>Created attachment 355322
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1480451</commentid>
    <comment_count>5</comment_count>
      <attachid>355322</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-11-20 04:03:44 -0800</bug_when>
    <thetext>Comment on attachment 355322
Patch

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

r=me with comments.

&gt; Source/JavaScriptCore/jit/JITCall32_64.cpp:298
&gt; +    if (compileCallEval(bytecode)) {

This brace is not necessary.

&gt; Source/JavaScriptCore/llint/LowLevelInterpreter.asm:628
&gt; +elsif ARMv7
&gt; +    macro probe(action)
&gt; +        push a0
&gt; +        push a1
&gt; +        push a2
&gt; +        push a3
&gt; +        push t0
&gt; +        push t1
&gt; +        push t2
&gt; +        push t3
&gt; +        push t4
&gt; +        push t5
&gt; +        push lr
&gt; +        push csr0
&gt; +
&gt; +        action()
&gt; +
&gt; +        pop csr0
&gt; +        pop lr
&gt; +        pop t5
&gt; +        pop t4
&gt; +        pop t3
&gt; +        pop t2
&gt; +        pop t1
&gt; +        pop t0
&gt; +        pop a3
&gt; +        pop a2
&gt; +        pop a1
&gt; +        pop a0
&gt; +    end

The implementation is almost the same to the above implementation for X86_64 or ARM64 or ARM64E.
Can we share the code with it?

&gt; Source/JavaScriptCore/runtime/SamplingProfiler.cpp:447
&gt; +
&gt; +    if (!codeBlock-&gt;instructions().size()) {
&gt; +        isValid = false;
&gt; +        return 0;
&gt; +    }

I think this is unnecessary if we add InstructionStream::contains, which is described below.

&gt; Source/JavaScriptCore/runtime/SamplingProfiler.cpp:451
&gt; +    const Instruction* begin = codeBlock-&gt;instructions().at(0).ptr();
&gt; +    const Instruction* end = reinterpret_cast&lt;const Instruction*&gt;(reinterpret_cast&lt;const uint8_t*&gt;(begin) + codeBlock-&gt;instructions().size());
&gt; +    if (instruction &gt;= begin &amp;&amp; instruction &lt; end) {

I think this should be encapsulated in InstructionStream class. Adding InstructionStream::contains, and

if (codeBlock-&gt;instructions().contains(nstruction)) {

looks better.

&gt; Source/cmake/WebKitFeatures.cmake:71
&gt;      elseif (WTF_CPU_ARM AND WTF_OS_UNIX)

Should we switch this `UNIX` to `LINUX` because `OS(LINUX)` is checked in Platform.h?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1480567</commentid>
    <comment_count>6</comment_count>
      <attachid>355356</attachid>
    <who name="Dominik Inführ">dominik.infuehr</who>
    <bug_when>2018-11-20 12:44:33 -0800</bug_when>
    <thetext>Created attachment 355356
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1480568</commentid>
    <comment_count>7</comment_count>
    <who name="Dominik Inführ">dominik.infuehr</who>
    <bug_when>2018-11-20 12:46:56 -0800</bug_when>
    <thetext>Thanks for the review! I think I&apos;ve addressed your comments.

The braces are removed. The probe-macro from x64 and arm64 is now also used for arm. I added InstructionStream::contains and in CMakeLists.txt I am now using WTF_OS_LINUX instead of WTF_OS_UNIX (I had to introduce that flag).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1480686</commentid>
    <comment_count>8</comment_count>
      <attachid>355356</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-11-21 00:02:51 -0800</bug_when>
    <thetext>Comment on attachment 355356
Patch

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

r=me

&gt; Source/JavaScriptCore/bytecode/InstructionStream.cpp:49
&gt; +    const Instruction* begin = at(0).ptr();
&gt; +    const Instruction* end = reinterpret_cast&lt;const Instruction*&gt;(reinterpret_cast&lt;const uint8_t*&gt;(begin) + size());
&gt; +
&gt; +    return instruction &gt;= begin &amp;&amp; instruction &lt; end;

Actually, you do not need to use `Instruction*` here. You can define this function simply by,

const uint8_t* pointer = bitwise_cast&lt;const uint8_t*&gt;(instruction);
return pointer &gt;= m_instructions.data() &amp;&amp; pointer &lt; (m_instructions.data() + m_instructions.size());

&gt; Source/JavaScriptCore/jit/GPRInfo.h:531
&gt; +#define NUMBER_OF_CALLEE_SAVES_REGISTERS 1u

This is only correct for ARM_THUMB2.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1480700</commentid>
    <comment_count>9</comment_count>
      <attachid>355395</attachid>
    <who name="Dominik Inführ">dominik.infuehr</who>
    <bug_when>2018-11-21 01:10:10 -0800</bug_when>
    <thetext>Created attachment 355395
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1480702</commentid>
    <comment_count>10</comment_count>
      <attachid>355395</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-11-21 01:12:15 -0800</bug_when>
    <thetext>Comment on attachment 355395
Patch

r=me, nice!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1480712</commentid>
    <comment_count>11</comment_count>
      <attachid>355395</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-11-21 03:03:36 -0800</bug_when>
    <thetext>Comment on attachment 355395
Patch

Clearing flags on attachment: 355395

Committed r238414: &lt;https://trac.webkit.org/changeset/238414&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1480713</commentid>
    <comment_count>12</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-11-21 03:03:38 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1480714</commentid>
    <comment_count>13</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-11-21 03:04:22 -0800</bug_when>
    <thetext>&lt;rdar://problem/46198694&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>354562</attachid>
            <date>2018-11-12 09:32:54 -0800</date>
            <delta_ts>2018-11-20 01:06:38 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191548-20181112183252.patch</filename>
            <type>text/plain</type>
            <size>143217</size>
            <attacher name="Dominik Inführ">dominik.infuehr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM4MDg2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA0
NWMzYmVmZGY3Yzc1MWJhNjgwZWFhOTMyOWQ2MWEwM2U3NmJiNGM2Li4xNjQwNTE3Y2UzM2Q0MWM2
ZjViZTY4YmM3ZWU4NzdjODE0NzU0N2NjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxODkgQEAKKzIwMTgtMTEtMTIgIERvbWluaWsgSW5mdWVociAgPGRpbmZ1ZWhyQGlnYWxp
YS5jb20+CisKKyAgICAgICAgRW5hYmxlIEpJVCBvbiBBUk0vTGludXgKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTU0OAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEVuYWJsZSBKSVQgYnkgZGVmYXVsdCBv
biBBUk12Ny9MaW51eCBhZnRlciBpdCB3YXMgZGlzYWJsZWQgd2l0aAorICAgICAgICByZWNlbnQg
Ynl0Y29kZSBmb3JtYXQgY2hhbmdlLgorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpnZXRJQ1N0YXR1c01hcCk6CisgICAgICAgICog
Ynl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bWV0YWRhdGEp
OgorICAgICAgICAqIGJ5dGVjb2RlL0luQnlJZFN0YXR1cy5jcHA6CisgICAgICAgIChKU0M6Oklu
QnlJZFN0YXR1czo6Y29tcHV0ZUZvcik6CisgICAgICAgICogYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24u
aDoKKyAgICAgICAgKEpTQzo6SW5zdHJ1Y3Rpb246OmNhc3QpOgorICAgICAgICAqIGJ5dGVjb2Rl
L01ldGFkYXRhVGFibGUuaDoKKyAgICAgICAgKEpTQzo6TWV0YWRhdGFUYWJsZTo6Zm9yRWFjaCk6
CisgICAgICAgICogYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHA6CisgICAgICAgIChKU0M6OlB1
dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IpOgorICAgICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjpo
YXNFeGl0U2l0ZSk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5o
OgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpyZWlm
eUlubGluZWRDYWxsRnJhbWVzKToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29t
bW9uLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpyZWlmeUlubGluZWRDYWxsRnJhbWVzKToKKyAg
ICAgICAgKiBnZW5lcmF0b3IvQXJndW1lbnQucmI6CisgICAgICAgICogZ2VuZXJhdG9yL09wY29k
ZS5yYjoKKyAgICAgICAgKiBqaXQvR1BSSW5mby5oOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAg
ICAgICAgKiBqaXQvSklUQXJpdGhtZXRpYzMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X2NvbXBhcmVBbmRKdW1wKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVVbnNp
Z25lZEFuZEp1bXApOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF91bnNpZ25lZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9p
bmMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZGVjKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0QmluYXJ5RG91YmxlT3ApOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbW9kKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9tb2QpOgorICAgICAgICAqIGppdC9KSVRD
YWxsMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX3JldCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNs
b3dfb3BfY2FsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9jYWxsX2V2YWwpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTbG93X29wX2NhbGxfdmFyYXJncyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93
X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93
X29wX2NvbnN0cnVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jYWxsKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3RhaWxfY2FsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9jYWxsX2V2YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2FsbF92YXJhcmdz
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RhaWxfY2FsbF92YXJhcmdzKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jb25zdHJ1Y3RfdmFyYXJncyk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9jb25zdHJ1Y3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVTZXR1
cEZyYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWwpOgorICAgICAgICAo
SlNDOjpKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6SklUOjpj
b21waWxlT3BDYWxsKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2Up
OgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVTZXR1cFZhcmFyZ3NGcmFtZSk6IERlbGV0ZWQu
CisgICAgICAgICogaml0L0pJVElubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SklUOjp1cGRhdGVU
b3BDYWxsRnJhbWUpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2NhdGNoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9s
b29wX2hpbnQpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzMzJfNjQuY3BwOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfbW92KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VuZCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbXApOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfbmV3X29iamVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfbmV3X29i
amVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNl
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2luc3RhbmNlb2YpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZl9jdXN0b20pOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRTbG93X29wX2luc3RhbmNlb2YpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2lu
c3RhbmNlb2ZfY3VzdG9tKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX2VtcHR5KToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX3VuZGVmaW5lZCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9pc19ib29sZWFuKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lz
X251bWJlcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pc19jZWxsX3dpdGhfdHlwZSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pc19vYmplY3QpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Nl
dF9mdW5jdGlvbl9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25vdCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZmFsc2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfanRydWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfamVxX251bGwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX2puZXFfcHRyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VxKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0U2xvd19vcF9lcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9q
ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2plcSk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9uZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX25lcSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbmVxKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0U2xvd19vcF9qbmVxKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BTdHJpY3RFcSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zdHJpY3RlcSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9uc3RyaWN0ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcFN0cmlj
dEVxSnVtcCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qc3RyaWN0ZXEpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5zdHJpY3RlcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3BfanN0cmljdGVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9qbnN0
cmljdGVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VxX251bGwpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfbmVxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
dGhyb3cpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX3RvX3N0cmluZyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF90b19vYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2F0Y2gpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfaWRlbnRpdHlfd2l0aF9wcm9maWxlKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2dldF9wYXJlbnRfc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3Bfc3dpdGNoX2ltbSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hh
cik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2RlYnVnKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2Vu
dGVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9zY29wZSk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF90b190aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NoZWNrX3Rkeik6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KToKKyAgICAgICAg
KEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eSk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfZ2V0X2RpcmVjdF9wbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9l
bnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9l
bnVtZXJhdG9yX2dlbmVyaWNfcG5hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHJv
ZmlsZV90eXBlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tl
bl9wcm9sb2d1ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNr
ZW5fdGFpbCk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X3B1dF9nZXR0ZXJfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9zZXR0
ZXJfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2RlbF9ieV9pZCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX2dldF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRHZXRCeVZhbFdpdGhD
YWNoZWRJZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsX2RpcmVjdCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2Vu
ZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEFycmF5U3Rv
cmFnZVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0QnlWYWxXaXRoQ2FjaGVk
SWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9n
ZXRfYnlfaWRfZGlyZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlf
aWRfZGlyZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV9pZCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRT
bG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
cHV0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5fYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRTbG93X29wX2luX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Jlc29s
dmVfc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX3B1dF90b19zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3BfcHV0X3RvX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9m
cm9tX2FyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1l
bnRzKToKKyAgICAgICAgKiBqaXQvUmVnaXN0ZXJTZXQuY3BwOgorICAgICAgICAoSlNDOjpSZWdp
c3RlclNldDo6dm1DYWxsZWVTYXZlUmVnaXN0ZXJzKToKKyAgICAgICAgKiBsbGludC9MTEludERh
dGEuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6RGF0YTo6cGVyZm9ybUFzc2VydGlvbnMpOgor
ICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtOgorICAgICAgICAqIHJ1bnRp
bWUvU2FtcGxpbmdQcm9maWxlci5jcHA6CisgICAgICAgIChKU0M6OnRyeUdldEJ5dGVjb2RlSW5k
ZXgpOgorCiAyMDE4LTExLTExICBCZW5qYW1pbiBQb3VsYWluICA8YmVuamFtaW5Ad2Via2l0Lm9y
Zz4KIAogICAgICAgICBGaXggYSBmaXhtZTogcmVuYW1lIHd0Zk9iamNNc2dTZW5kIHRvIHd0Zk9i
akNNc2dTZW5kCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYv
Q2hhbmdlTG9nCmluZGV4IDY5OTVmNGI1MmNlZTA1YjJiOGZiZmY5MDE4NDZjMTY5OGNlNDI3ZjAu
LmNiZWFmM2Q5NzA1MDZiOTQ2MWVjYzhjM2VlMDM1MmU4ZWU4YmYwYWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTUgQEAKKzIwMTgtMTEtMTIgIERvbWluaWsgSW5mdWVociAgPGRpbmZ1ZWhyQGlnYWxpYS5jb20+
CisKKyAgICAgICAgRW5hYmxlIEpJVCBvbiBBUk0vTGludXgKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTU0OAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEVuYWJsZSBKSVQgYnkgZGVmYXVsdCBvbiBBUk12
Ny9MaW51eCBhZnRlciBpdCB3YXMgZGlzYWJsZWQgd2l0aAorICAgICAgICByZWNlbnQgYnl0Y29k
ZSBmb3JtYXQgY2hhbmdlLgorCisgICAgICAgICogd3RmL1BsYXRmb3JtLmg6CisKIDIwMTgtMTEt
MTAgIEJlbmphbWluIFBvdWxhaW4gIDxiZW5qYW1pbkB3ZWJraXQub3JnPgogCiAgICAgICAgIEZp
eCBhIGZpeG1lOiByZW5hbWUgd3RmT2JqY01zZ1NlbmQgdG8gd3RmT2JqQ01zZ1NlbmQKZGlmZiAt
LWdpdCBhL1NvdXJjZS9ibWFsbG9jL0NoYW5nZUxvZyBiL1NvdXJjZS9ibWFsbG9jL0NoYW5nZUxv
ZwppbmRleCAzN2FkZmU4MGI4MWEzZWNmYzlkYTU0M2YwZTdjNzVjNGViMDQ1ZjFmLi4yNjFkNjll
MTM4NjNlYWIwM2ExZjEyYjRkZDE2MGE3NjRlNWUxNjY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvYm1h
bGxvYy9DaGFuZ2VMb2cKKysrIGIvU291cmNlL2JtYWxsb2MvQ2hhbmdlTG9nCkBAIC0xLDMgKzEs
MTMgQEAKKzIwMTgtMTEtMTIgIERvbWluaWsgSW5mdWVociAgPGRpbmZ1ZWhyQGlnYWxpYS5jb20+
CisKKyAgICAgICAgRW5hYmxlIEpJVCBvbiBBUk0vTGludXgKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTU0OAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogYm1hbGxvYy9Jc29QYWdlSW5saW5lcy5oOgor
ICAgICAgICAoYm1hbGxvYzo6SXNvUGFnZTxDb25maWc+OjpzdGFydEFsbG9jYXRpbmcpOgorCiAy
MDE4LTExLTAxICBKaWV3ZW4gVGFuICA8amlld2VuX3RhbkBhcHBsZS5jb20+CiAKICAgICAgICAg
UmVwbGFjZSBDb21tb25SYW5kb20gU1BJIHdpdGggQVBJCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCmluZGV4IDdiNzYyM2Y1MGEyN2JiNDYyNjI3ZTE0NDc4
OGY4ZDg3NGRlOTVhNTMuLjA1YTkwOTJiMmZhNzY5YTQxODA5Yzc0NjU1NWJjMDE4YTNiYTkxN2Yg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCkBAIC0x
Mzg3LDYgKzEzODcsNyBAQCB2b2lkIENvZGVCbG9jazo6Z2V0SUNTdGF0dXNNYXAoY29uc3QgQ29u
Y3VycmVudEpTTG9ja2VyJiwgSUNTdGF0dXNNYXAmIHJlc3VsdCkKICAgICAgICAgICAgIHJlc3Vs
dC5hZGQoY2FsbExpbmtJbmZvLT5jb2RlT3JpZ2luKCksIElDU3RhdHVzKCkpLml0ZXJhdG9yLT52
YWx1ZS5jYWxsTGlua0luZm8gPSBjYWxsTGlua0luZm87CiAgICAgICAgIGZvciAoQnlWYWxJbmZv
KiBieVZhbEluZm8gOiBtX2J5VmFsSW5mb3MpCiAgICAgICAgICAgICByZXN1bHQuYWRkKENvZGVP
cmlnaW4oYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4KSwgSUNTdGF0dXMoKSkuaXRlcmF0b3ItPnZh
bHVlLmJ5VmFsSW5mbyA9IGJ5VmFsSW5mbzsKKyNpZiBFTkFCTEUoREZHX0pJVCkKICAgICAgICAg
aWYgKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChqaXRUeXBlKCkpKSB7CiAgICAgICAgICAgICBE
Rkc6OkNvbW1vbkRhdGEqIGRmZ0NvbW1vbiA9IG1faml0Q29kZS0+ZGZnQ29tbW9uKCk7CiAgICAg
ICAgICAgICBmb3IgKGF1dG8mIHBhaXIgOiBkZmdDb21tb24tPnJlY29yZGVkU3RhdHVzZXMuY2Fs
bHMpCkBAIC0xMzk4LDYgKzEzOTksNyBAQCB2b2lkIENvZGVCbG9jazo6Z2V0SUNTdGF0dXNNYXAo
Y29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgSUNTdGF0dXNNYXAmIHJlc3VsdCkKICAgICAgICAg
ICAgIGZvciAoYXV0byYgcGFpciA6IGRmZ0NvbW1vbi0+cmVjb3JkZWRTdGF0dXNlcy5pbnMpCiAg
ICAgICAgICAgICAgICAgcmVzdWx0LmFkZChwYWlyLmZpcnN0LCBJQ1N0YXR1cygpKS5pdGVyYXRv
ci0+dmFsdWUuaW5TdGF0dXMgPSBwYWlyLnNlY29uZC5nZXQoKTsKICAgICAgICAgfQorI2VuZGlm
CiAgICAgfQogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0ocmVzdWx0KTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAppbmRleCAzYzViNTY3YTI4OWIxMGNjMTNkM2U4
ZWJjNTdmZjBjZDQ5ZjRmZDYyLi40ZDM4MGNkNTY2M2ZkMDM1OTliMWYwODY3NzA3YWViZDI1MjE3
MDYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCkBAIC04
NjAsNyArODYwLDcgQEAgcHVibGljOgogICAgIE1ldGFkYXRhJiBtZXRhZGF0YShPcGNvZGVJRCBv
cGNvZGVJRCwgdW5zaWduZWQgbWV0YWRhdGFJRCkKICAgICB7CiAgICAgICAgIEFTU0VSVChtX21l
dGFkYXRhKTsKLSAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8TWV0YWRhdGEqPihtX21l
dGFkYXRhLT5nZXQob3Bjb2RlSUQpKVttZXRhZGF0YUlEXTsKKyAgICAgICAgcmV0dXJuIGJpdHdp
c2VfY2FzdDxNZXRhZGF0YSo+KG1fbWV0YWRhdGEtPmdldChvcGNvZGVJRCkpW21ldGFkYXRhSURd
OwogICAgIH0KIAogICAgIHNpemVfdCBtZXRhZGF0YVNpemVJbkJ5dGVzKCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRTdGF0dXMuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFN0YXR1cy5jcHAKaW5kZXggMjVmYzJiMzhj
NDUzNDMxYThhYTJkZTNkM2EyMmE2MzRmOTNjMWJhZC4uMzQ2MGJlZDZjOTI3NTE4YTZmNWM4ZTlj
NGEwNzA4ODhjMzE1ZDA2NSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0luQnlJZFN0YXR1cy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0luQnlJZFN0YXR1cy5jcHAKQEAgLTg5LDYgKzg5LDcgQEAgSW5CeUlkU3RhdHVzIEluQnlJZFN0
YXR1czo6Y29tcHV0ZUZvcigKICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgIH07
CiAgICAgICAgIAorI2lmIEVOQUJMRShERkdfSklUKQogICAgICAgICBpZiAoc3RhdHVzLnN0dWJJ
bmZvKSB7CiAgICAgICAgICAgICBJbkJ5SWRTdGF0dXMgcmVzdWx0OwogICAgICAgICAgICAgewpA
QCAtOTgsNiArOTksNyBAQCBJbkJ5SWRTdGF0dXMgSW5CeUlkU3RhdHVzOjpjb21wdXRlRm9yKAog
ICAgICAgICAgICAgaWYgKHJlc3VsdC5pc1NldCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBi
bGVzcyhyZXN1bHQpOwogICAgICAgICB9CisjZW5kaWYKICAgICAgICAgCiAgICAgICAgIGlmIChz
dGF0dXMuaW5TdGF0dXMpCiAgICAgICAgICAgICByZXR1cm4gYmxlc3MoKnN0YXR1cy5pblN0YXR1
cyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rp
b24uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCmluZGV4
IGQ5NGZjNjcxOGQ1M2FjOTBhY2ZkNmNkMjUxYjIzNDgyYTc2OTU0MjQuLmNiODI2Y2RmYjVlNWQz
Zjk1ZDMyOTRlNTZhMmIwNGM1ZDQ0N2MwMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9JbnN0cnVjdGlvbi5oCkBAIC05MSw3ICs5MSw3IEBAIHB1YmxpYzoKICAgICBUKiBj
YXN0KCkKICAgICB7CiAgICAgICAgIEFTU0VSVChpczxUPigpKTsKLSAgICAgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8VCo+KHRoaXMpOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PFQq
Pih0aGlzKTsKICAgICB9CiAKICAgICB0ZW1wbGF0ZTxjbGFzcyBUPgpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01ldGFkYXRhVGFibGUuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9NZXRhZGF0YVRhYmxlLmgKaW5kZXggNjBjZGU1ZjVhYTEyODE1
MjI4YjM2NmMwODk5MDUyZTU3MzU4ZmNhZS4uYTVkNDEyMWIxZDQxZDE2MWJmMjY1NDJlMDkyODZj
ZmJkOTkzOTViOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01l
dGFkYXRhVGFibGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0YWRh
dGFUYWJsZS5oCkBAIC01NSw4ICs1NSw4IEBAIHB1YmxpYzoKICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZSBPcCwgdHlwZW5hbWUgRnVuY3Rvcj4KICAgICBBTFdBWVNfSU5MSU5FIHZvaWQgZm9yRWFjaChj
b25zdCBGdW5jdG9yJiBmdW5jKQogICAgIHsKLSAgICAgICAgYXV0byogbWV0YWRhdGEgPSByZWlu
dGVycHJldF9jYXN0PHR5cGVuYW1lIE9wOjpNZXRhZGF0YSo+KGdldChPcDo6b3Bjb2RlSUQpKTsK
LSAgICAgICAgYXV0byogZW5kID0gcmVpbnRlcnByZXRfY2FzdDx0eXBlbmFtZSBPcDo6TWV0YWRh
dGEqPihnZXRJbXBsKE9wOjpvcGNvZGVJRCArIDEpKTsKKyAgICAgICAgYXV0byogbWV0YWRhdGEg
PSBiaXR3aXNlX2Nhc3Q8dHlwZW5hbWUgT3A6Ok1ldGFkYXRhKj4oZ2V0KE9wOjpvcGNvZGVJRCkp
OworICAgICAgICBhdXRvKiBlbmQgPSBiaXR3aXNlX2Nhc3Q8dHlwZW5hbWUgT3A6Ok1ldGFkYXRh
Kj4oZ2V0SW1wbChPcDo6b3Bjb2RlSUQgKyAxKSk7CiAgICAgICAgIGZvciAoOyBtZXRhZGF0YSAr
IDEgPD0gZW5kOyArK21ldGFkYXRhKQogICAgICAgICAgICAgZnVuYygqbWV0YWRhdGEpOwogICAg
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3Rh
dHVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNw
cAppbmRleCA2NzA5NTExNTNhMGZiZWQxN2U0YzYzYjc1NzU1Njc4ZTEyNGU1MjYyLi5mZjdkYThk
NDEzNGZhMjYyMjliNWEyNjkwOWUyMmM4MjQ4MTI2YWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuY3BwCkBAIC00NywxMyArNDcsNiBAQCBi
b29sIFB1dEJ5SWRTdGF0dXM6OmFwcGVuZFZhcmlhbnQoY29uc3QgUHV0QnlJZFZhcmlhbnQmIHZh
cmlhbnQpCiAgICAgcmV0dXJuIGFwcGVuZElDU3RhdHVzVmFyaWFudChtX3ZhcmlhbnRzLCB2YXJp
YW50KTsKIH0KIAotI2lmIEVOQUJMRShERkdfSklUKQotRXhpdEZsYWcgUHV0QnlJZFN0YXR1czo6
aGFzRXhpdFNpdGUoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrLCB1bnNpZ25lZCBieXRlY29kZUlu
ZGV4KQotewotICAgIHJldHVybiBoYXNCYWRDYWNoZUV4aXRTaXRlKHByb2ZpbGVkQmxvY2ssIGJ5
dGVjb2RlSW5kZXgpOwotfQotI2VuZGlmCi0KIFB1dEJ5SWRTdGF0dXMgUHV0QnlJZFN0YXR1czo6
Y29tcHV0ZUZyb21MTEludChDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIHVuc2lnbmVkIGJ5dGVj
b2RlSW5kZXgsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCiB7CiAgICAgVk0mIHZtID0gKnByb2Zp
bGVkQmxvY2stPnZtKCk7CkBAIC0xMTgsNiArMTExLDggQEAgUHV0QnlJZFN0YXR1cyBQdXRCeUlk
U3RhdHVzOjpjb21wdXRlRm9yKENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgSUNTdGF0dXNNYXAm
IG0KICAgICByZXR1cm4gcmVzdWx0OwogI2Vsc2UgLy8gRU5BQkxFKEpJVCkKICAgICBVTlVTRURf
UEFSQU0obWFwKTsKKyAgICBVTlVTRURfUEFSQU0oZGlkRXhpdCk7CisgICAgVU5VU0VEX1BBUkFN
KGNhbGxFeGl0U2l0ZURhdGEpOwogICAgIHJldHVybiBQdXRCeUlkU3RhdHVzKE5vSW5mb3JtYXRp
b24pOwogI2VuZGlmIC8vIEVOQUJMRShKSVQpCiB9CkBAIC0yNDQsNyArMjM5LDcgQEAgUHV0QnlJ
ZFN0YXR1cyBQdXRCeUlkU3RhdHVzOjpjb21wdXRlRm9yKENvZGVCbG9jayogYmFzZWxpbmVCbG9j
aywgSUNTdGF0dXNNYXAmIGIKIHsKICAgICBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhIGNh
bGxFeGl0U2l0ZURhdGEgPQogICAgICAgICBDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUV4aXRTaXRl
RGF0YShiYXNlbGluZUJsb2NrLCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOwotICAgIEV4aXRG
bGFnIGRpZEV4aXQgPSBoYXNFeGl0U2l0ZShiYXNlbGluZUJsb2NrLCBjb2RlT3JpZ2luLmJ5dGVj
b2RlSW5kZXgpOworICAgIEV4aXRGbGFnIGRpZEV4aXQgPSBoYXNCYWRDYWNoZUV4aXRTaXRlKGJh
c2VsaW5lQmxvY2ssIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7CiAKICAgICBmb3IgKElDU3Rh
dHVzQ29udGV4dCogY29udGV4dCA6IGNvbnRleHRTdGFjaykgewogICAgICAgICBJQ1N0YXR1cyBz
dGF0dXMgPSBjb250ZXh0LT5nZXQoY29kZU9yaWdpbik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5oIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1B1dEJ5SWRTdGF0dXMuaAppbmRleCAwMjg2OWZmMGI2ZTBhYmUyMThhNDEw
ZjhkNGQ5MjAwNmE0MTlhYTg3Li40YzQ1Nzg1MDUwNWI2NzI1YzAwN2E2OTNiMTc2YmJhZDIwMTZj
NDVmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUHV0QnlJZFN0
YXR1cy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9QdXRCeUlkU3RhdHVz
LmgKQEAgLTEyNSw5ICsxMjUsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBkdW1wKFByaW50U3RyZWFt
JikgY29uc3Q7CiAgICAgCiBwcml2YXRlOgotI2lmIEVOQUJMRShERkdfSklUKQotICAgIHN0YXRp
YyBFeGl0RmxhZyBoYXNFeGl0U2l0ZShDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRlY29kZUluZGV4
KTsKLSNlbmRpZgogI2lmIEVOQUJMRShKSVQpCiAgICAgc3RhdGljIFB1dEJ5SWRTdGF0dXMgY29t
cHV0ZUZvclN0dWJJbmZvKAogICAgICAgICBjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBDb2Rl
QmxvY2sqLCBTdHJ1Y3R1cmVTdHViSW5mbyosIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQsCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAppbmRleCAxMmIzNGUyZjQxYjg3OTFh
ZGRmYTBkYTdhNjRhZjk5YjI1MDM4OWZlLi42ZWE5Nzc2OWMwOWQzMmI5MzZlMDRjODdlODRjOGM4
ZGVlZDRhMGE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4
aXQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKQEAg
LTgxMSw3ICs4MTEsNyBAQCBzdGF0aWMgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENvbnRl
eHQmIGNvbnRleHQsIENvZGVCbG9jayogb3V0ZXJtb3N0QmFzZWxpbgogICAgICAgICBpZiAoIWlu
bGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkKICAgICAgICAgICAgIGZyYW1lLnNldE9wZXJh
bmQoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwg
SlNWYWx1ZShpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZUNvbnN0YW50KCkpKTsKICNlbHNlIC8vIFVT
RShKU1ZBTFVFNjQpIC8vIHNvIHRoaXMgaXMgdGhlIDMyLWJpdCBwYXJ0Ci0gICAgICAgIEluc3Ry
dWN0aW9uKiBpbnN0cnVjdGlvbiA9ICZiYXNlbGluZUNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKClb
Y29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleF07CisgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbiA9IGJhc2VsaW5lQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChjb2RlT3Jp
Z2luLT5ieXRlY29kZUluZGV4KS5wdHIoKTsKICAgICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRz
ID0gQ2FsbFNpdGVJbmRleChpbnN0cnVjdGlvbikuYml0cygpOwogICAgICAgICBmcmFtZS5zZXRP
cGVyYW5kPHVpbnQzMl90PihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1l
U2xvdDo6YXJndW1lbnRDb3VudCwgVGFnT2Zmc2V0LCBsb2NhdGlvbkJpdHMpOwogICAgICAgICBm
cmFtZS5zZXRPcGVyYW5kPHVpbnQzMl90PihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsg
Q2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCBUYWdPZmZzZXQsIHN0YXRpY19jYXN0PHVpbnQzMl90PihK
U1ZhbHVlOjpDZWxsVGFnKSk7CkBAIC04MjUsNyArODI1LDcgQEAgc3RhdGljIHZvaWQgcmVpZnlJ
bmxpbmVkQ2FsbEZyYW1lcyhDb250ZXh0JiBjb250ZXh0LCBDb2RlQmxvY2sqIG91dGVybW9zdEJh
c2VsaW4KICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMg
PSBDYWxsU2l0ZUluZGV4KGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgpLmJpdHMoKTsKICNlbHNl
Ci0gICAgICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9ICZvdXRlcm1vc3RCYXNlbGluZUNv
ZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKClbY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleF07CisgICAg
ICAgIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IG91dGVybW9zdEJhc2VsaW5lQ29k
ZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KS5wdHIo
KTsKICAgICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChpbnN0cnVj
dGlvbikuYml0cygpOwogI2VuZGlmCiAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQ8dWludDMyX3Q+
KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQsIFRhZ09mZnNldCwgbG9jYXRpb25CaXRzKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVy
Q29tbW9uLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVy
Q29tbW9uLmNwcAppbmRleCAxMTFlYmQzMmIwN2JjOThjNjAxNTQ4YWZhOWZiMjc3ZDNmYWM0MGU3
Li5jMWFiODQ2OGE1MGNiYzUzMWUyYmY5M2JiNzRiMTE1NmRhMmU5NDIyIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3Bw
CkBAIC0yMzcsNyArMjM3LDcgQEAgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVs
cGVycyYgaml0LCBjb25zdCBPU1JFeGl0QmFzZSYgZXhpdCkKICAgICAgICAgICAgIGppdC5zdG9y
ZTY0KEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVl
KGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlQ29uc3RhbnQoKSkpKSwgQXNzZW1ibHlIZWxwZXJzOjph
ZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQg
KyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7CiAjZWxzZSAvLyBVU0UoSlNWQUxVRTY0KSAvLyBz
byB0aGlzIGlzIHRoZSAzMi1iaXQgcGFydAogICAgICAgICBqaXQuc3RvcmVQdHIoY2FsbGVyRnJh
bWVHUFIsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvckJ5dGVPZmZzZXQoaW5saW5lQ2FsbEZy
YW1lLT5jYWxsZXJGcmFtZU9mZnNldCgpKSk7Ci0gICAgICAgIEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbiA9ICZiYXNlbGluZUNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKClbY29kZU9yaWdpbi0+Ynl0
ZWNvZGVJbmRleF07CisgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IGJh
c2VsaW5lQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChjb2RlT3JpZ2luLT5ieXRlY29kZUlu
ZGV4KS5wdHIoKTsKICAgICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRl
eChpbnN0cnVjdGlvbikuYml0cygpOwogICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBl
cnM6OlRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0Zvcigo
VmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1l
U2xvdDo6YXJndW1lbnRDb3VudCkpKTsKICAgICAgICAgaml0LnN0b3JlMzIoQXNzZW1ibHlIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIEFzc2VtYmx5SGVscGVyczo6dGFn
Rm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxs
RnJhbWVTbG90OjpjYWxsZWUpKSk7CkBAIC0yNTEsNyArMjUxLDcgQEAgdm9pZCByZWlmeUlubGlu
ZWRDYWxsRnJhbWVzKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBPU1JFeGl0QmFzZSYgZXhpdCkK
ICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxs
U2l0ZUluZGV4KGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgpLmJpdHMoKTsKICNlbHNlCi0gICAg
ICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9ICZqaXQuYmFzZWxpbmVDb2RlQmxvY2soKS0+
aW5zdHJ1Y3Rpb25zKClbY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleF07CisgICAgICAgIGNvbnN0
IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IGppdC5iYXNlbGluZUNvZGVCbG9jaygpLT5pbnN0
cnVjdGlvbnMoKS5hdChjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KS5wdHIoKTsKICAgICAgICAg
dWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChpbnN0cnVjdGlvbikuYml0cygp
OwogI2VuZGlmCiAgICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZElt
bTMyKGxvY2F0aW9uQml0cyksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKChWaXJ0dWFsUmVnaXN0
ZXIpKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL0FyZ3VtZW50LnJiIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2dlbmVyYXRvci9Bcmd1bWVudC5yYgppbmRleCBmNWRkZjUwNWM0MTQ1YjFiN2JkZjI0Yzcx
OWUzNjg5ZWZmYjVjMTI0Li5lNjlmOGFiNGFhYWI3YmJlMWQ0ZTI4N2JlZTk0MDU2NjM2MjE1YjY2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL0FyZ3VtZW50LnJi
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvQXJndW1lbnQucmIKQEAgLTc0
LDcgKzc0LDcgQEAgY2xhc3MgQXJndW1lbnQKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCEj
e0ZpdHM6OmNoZWNrICJzaXplIiwgInZhbHVlIiwgQHR5cGV9KQogICAgICAgICAgICAgICAgIHZh
bHVlID0gZnVuYygpOwotICAgICAgICAgICAgYXV0byogc3RyZWFtID0gcmVpbnRlcnByZXRfY2Fz
dDx0eXBlbmFtZSBUeXBlQnlTaXplPHNpemU+Ojp0eXBlKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50
OF90Kj4odGhpcykgKyAje0BpbmRleH0gKiBzaXplICsgUGFkZGluZ0J5U2l6ZTxzaXplPjo6dmFs
dWUpOworICAgICAgICAgICAgYXV0byogc3RyZWFtID0gYml0d2lzZV9jYXN0PHR5cGVuYW1lIFR5
cGVCeVNpemU8c2l6ZT46OnR5cGUqPihyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPih0aGlzKSAr
ICN7QGluZGV4fSAqIHNpemUgKyBQYWRkaW5nQnlTaXplPHNpemU+Ojp2YWx1ZSk7CiAgICAgICAg
ICAgICAqc3RyZWFtID0gI3tGaXRzOjpjb252ZXJ0ICJzaXplIiwgInZhbHVlIiwgQHR5cGV9Owog
ICAgICAgICB9CiAgICAgICAgIEVPRgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2dlbmVyYXRvci9PcGNvZGUucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL09w
Y29kZS5yYgppbmRleCBiMGE0ZTBhNDJlNTk3OTAzMzczZTA5YTU5N2NlMWViMWYzYzkxYWNkLi5l
YWUwMGM1NzZkMWQ4MThlYzYzMWVkOWQxZjhjZmI4YjMyZTUyZWE5IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL09wY29kZS5yYgorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZ2VuZXJhdG9yL09wY29kZS5yYgpAQCAtMTkyLDcgKzE5Miw3IEBAIGNsYXNzIE9w
Y29kZQogICAgICAgICAgICAgaWYgKCpzdHJlYW0gIT0gb3Bfd2lkZSkKICAgICAgICAgICAgICAg
ICByZXR1cm4geyBzdHJlYW0gfTsKIAotICAgICAgICAgICAgYXV0byB3aWRlU3RyZWFtID0gcmVp
bnRlcnByZXRfY2FzdDxjb25zdCB1aW50MzJfdCo+KHN0cmVhbSArIDEpOworICAgICAgICAgICAg
YXV0byB3aWRlU3RyZWFtID0gYml0d2lzZV9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oc3RyZWFtICsg
MSk7CiAgICAgICAgICAgICByZXR1cm4geyB3aWRlU3RyZWFtIH07CiAgICAgICAgIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HUFJJbmZvLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0dQUkluZm8uaAppbmRleCBmMTVhZTgzNzViMzQxMzc0NmMxZTM3OTg4
N2U4M2ExMzE2NzMyOTQ0Li42ZjZhZGQwZWE4MWFhNmUyYTEzODZlMDQ0OTc3NTI3YjczYjE3NDIy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dQUkluZm8uaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dQUkluZm8uaApAQCAtNTI4LDcgKzUyOCw3IEBAIHB1
YmxpYzoKIAogI2lmIENQVShBUk0pCiAjZGVmaW5lIE5VTUJFUl9PRl9BUkdVTUVOVF9SRUdJU1RF
UlMgNHUKLSNkZWZpbmUgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgMHUKKyNkZWZp
bmUgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgMXUKIAogY2xhc3MgR1BSSW5mbyB7
CiBwdWJsaWM6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAppbmRleCA2ZGI0ZDdmNmFkZTNhZWQ0NjA4
ZDAyMjM1NjEwZTczZDA1ZDVjZTk3Li4zOTVmNTM4NmYyOWU5MDQ2NzdkNWIwZjc2MjQ2ZDk0ZmM5
YmE2ODczIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKQEAgLTQ1Nyw3ICs0NTcsOCBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBjb21waWxlR2V0QnlJZEhvdFBhdGgoY29uc3QgSWRl
bnRpZmllciopOwogCiAgICAgICAgIC8vIEFyaXRobWV0aWMgb3Bjb2RlIGhlbHBlcnMKLSAgICAg
ICAgdm9pZCBlbWl0QmluYXJ5RG91YmxlT3AoT3Bjb2RlSUQsIGludCBkc3QsIGludCBvcDEsIGlu
dCBvcDIsIE9wZXJhbmRUeXBlcywgSnVtcExpc3QmIG5vdEludDMyT3AxLCBKdW1wTGlzdCYgbm90
SW50MzJPcDIsIGJvb2wgb3AxSXNJblJlZ2lzdGVycyA9IHRydWUsIGJvb2wgb3AySXNJblJlZ2lz
dGVycyA9IHRydWUpOworICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+CisgICAgICAgIHZv
aWQgZW1pdEJpbmFyeURvdWJsZU9wKGNvbnN0IEluc3RydWN0aW9uICosIE9wZXJhbmRUeXBlcywg
SnVtcExpc3QmIG5vdEludDMyT3AxLCBKdW1wTGlzdCYgbm90SW50MzJPcDIsIGJvb2wgb3AxSXNJ
blJlZ2lzdGVycyA9IHRydWUsIGJvb2wgb3AySXNJblJlZ2lzdGVycyA9IHRydWUpOwogCiAjZWxz
ZSAvLyBVU0UoSlNWQUxVRTMyXzY0KQogICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0
ZXIoaW50IHNyYywgUmVnaXN0ZXJJRCBkc3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRBcml0aG1ldGljMzJfNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRBcml0aG1ldGljMzJfNjQuY3BwCmluZGV4IGQzZWJkYjY3YzUyMWNiNjk5ZjM3ZTA5
ODkyMDdhNGUyMWU3OWNjNTMuLjhiZTc0NWRmMzIwYmNmNDJlMzA3MWIzMmYyOWEzYmY2OGJiYTQ2
YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYzMy
XzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMzMl82
NC5jcHAKQEAgLTQxLDExICs0MSwxNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotdm9pZCBKSVQ6
OmVtaXRfY29tcGFyZUFuZEp1bXAoT3Bjb2RlSUQgb3Bjb2RlLCBpbnQgb3AxLCBpbnQgb3AyLCB1
bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQordGVtcGxhdGUg
PHR5cGVuYW1lIE9wPgordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKICAg
ICBKdW1wTGlzdCBub3RJbnQzMk9wMTsKICAgICBKdW1wTGlzdCBub3RJbnQzMk9wMjsKIAorICAg
IGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CisgICAgaW50IG9wMSA9IGJ5
dGVjb2RlLmxocy5vZmZzZXQoKTsKKyAgICBpbnQgb3AyID0gYnl0ZWNvZGUucmhzLm9mZnNldCgp
OworICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2Rl
LnRhcmdldCk7CisKICAgICAvLyBDaGFyYWN0ZXIgbGVzcy4KICAgICBpZiAoaXNPcGVyYW5kQ29u
c3RhbnRDaGFyKG9wMSkpIHsKICAgICAgICAgZW1pdExvYWQob3AyLCByZWdUMSwgcmVnVDApOwpA
QCAtODgsMTIgKzk0LDE4IEBAIHZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKE9wY29kZUlE
IG9wY29kZSwgaW50IG9wMSwgaW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0CiAgICAgSnVtcCBlbmQg
PSBqdW1wKCk7CiAKICAgICAvLyBEb3VibGUgbGVzcy4KLSAgICBlbWl0QmluYXJ5RG91YmxlT3Ao
b3Bjb2RlLCB0YXJnZXQsIG9wMSwgb3AyLCBPcGVyYW5kVHlwZXMoKSwgbm90SW50MzJPcDEsIG5v
dEludDMyT3AyLCAhaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSwgaXNPcGVyYW5kQ29uc3RhbnRJ
bnQob3AxKSB8fCAhaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AyKSk7CisgICAgZW1pdEJpbmFyeURv
dWJsZU9wPE9wPihpbnN0cnVjdGlvbiwgT3BlcmFuZFR5cGVzKCksIG5vdEludDMyT3AxLCBub3RJ
bnQzMk9wMiwgIWlzT3BlcmFuZENvbnN0YW50SW50KG9wMSksIGlzT3BlcmFuZENvbnN0YW50SW50
KG9wMSkgfHwgIWlzT3BlcmFuZENvbnN0YW50SW50KG9wMikpOwogICAgIGVuZC5saW5rKHRoaXMp
OwogfQogCi12b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wKGludCBvcDEsIGlu
dCBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Cit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWRBbmRK
dW1wKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBj
b25kaXRpb24pCiB7CisgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsK
KyAgICBpbnQgb3AxID0gYnl0ZWNvZGUubGhzLm9mZnNldCgpOworICAgIGludCBvcDIgPSBieXRl
Y29kZS5yaHMub2Zmc2V0KCk7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0
cnVjdGlvbiwgYnl0ZWNvZGUudGFyZ2V0KTsKKwogICAgIGlmIChpc09wZXJhbmRDb25zdGFudElu
dChvcDEpKSB7CiAgICAgICAgIGVtaXRMb2FkKG9wMiwgcmVnVDMsIHJlZ1QyKTsKICAgICAgICAg
YWRkSnVtcChicmFuY2gzMihjb21tdXRlKGNvbmRpdGlvbiksIHJlZ1QyLCBJbW0zMihnZXRDb25z
dGFudE9wZXJhbmQob3AxKS5hc0ludDMyKCkpKSwgdGFyZ2V0KTsKQEAgLTEwNiw5ICsxMTgsMTQg
QEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkQW5kSnVtcChpbnQgb3AxLCBpbnQgb3Ay
LCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW8KICAgICB9CiB9CiAKLQotdm9pZCBKSVQ6OmVtaXRf
Y29tcGFyZVVuc2lnbmVkKGludCBkc3QsIGludCBvcDEsIGludCBvcDIsIFJlbGF0aW9uYWxDb25k
aXRpb24gY29uZGl0aW9uKQordGVtcGxhdGUgPHR5cGVuYW1lIE9wPgordm9pZCBKSVQ6OmVtaXRf
Y29tcGFyZVVuc2lnbmVkKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25h
bENvbmRpdGlvbiBjb25kaXRpb24pCiB7CisgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcD4oKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOworICAgIGlu
dCBvcDEgPSBieXRlY29kZS5saHMub2Zmc2V0KCk7CisgICAgaW50IG9wMiA9IGJ5dGVjb2RlLnJo
cy5vZmZzZXQoKTsKKwogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7CiAgICAg
ICAgIGVtaXRMb2FkKG9wMiwgcmVnVDMsIHJlZ1QyKTsKICAgICAgICAgY29tcGFyZTMyKGNvbW11
dGUoY29uZGl0aW9uKSwgcmVnVDIsIEltbTMyKGdldENvbnN0YW50T3BlcmFuZChvcDEpLmFzSW50
MzIoKSksIHJlZ1QwKTsKQEAgLTEyMiw4ICsxMzksMTQgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFy
ZVVuc2lnbmVkKGludCBkc3QsIGludCBvcDEsIGludCBvcDIsIFJlbGF0aW9uYWxDb25kaXRpb24g
Y28KICAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmVnVDApOwogfQogCi12b2lkIEpJVDo6ZW1pdF9j
b21wYXJlQW5kSnVtcFNsb3coaW50IG9wMSwgaW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBEb3Vi
bGVDb25kaXRpb24sIHNpemVfdCAoSklUX09QRVJBVElPTiAqb3BlcmF0aW9uKShFeGVjU3RhdGUq
LCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3Zv
aWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiAqaW5zdHJ1
Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24p
KEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogeworICAgIGF1dG8gYnl0
ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7CisgICAgaW50IG9wMSA9IGJ5dGVjb2RlLmxo
cy5vZmZzZXQoKTsKKyAgICBpbnQgb3AyID0gYnl0ZWNvZGUucmhzLm9mZnNldCgpOworICAgIHVu
c2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLnRhcmdldCk7
CisKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCiAgICAgZW1pdExvYWQob3AxLCByZWdU
MSwgcmVnVDApOwpAQCAtMTMyLDEwICsxNTUsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFu
ZEp1bXBTbG93KGludCBvcDEsIGludCBvcDIsIHVuc2lnbmVkIHRhcmdldCwgRG91YmxlQ29uZGkK
ICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblpl
cm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfdW5z
aWduZWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29w
X3Vuc2lnbmVkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAg
aW50IHJlc3VsdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IG9w
MSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BVbnNpZ25lZD4oKTsKKyAgICBpbnQgcmVzdWx0ID0g
Ynl0ZWNvZGUuZHN0Lm9mZnNldCgpOworICAgIGludCBvcDEgPSBieXRlY29kZS5vcGVyYW5kLm9m
ZnNldCgpOwogICAgIAogICAgIGVtaXRMb2FkKG9wMSwgcmVnVDEsIHJlZ1QwKTsKICAgICAKQEAg
LTE0NCw5ICsxNjgsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdW5zaWduZWQoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBlbWl0U3RvcmVJbnQzMihyZXN1bHQsIHJlZ1QwLCBy
ZXN1bHQgPT0gb3AxKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfaW5jKEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9pbmMoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBpbnQgc3JjRHN0ID0gY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEluYz4oKTsKKyAgICBpbnQgc3JjRHN0ID0gYnl0ZWNvZGUuc3JjRHN0Lm9mZnNl
dCgpOwogCiAgICAgZW1pdExvYWQoc3JjRHN0LCByZWdUMSwgcmVnVDApOwogCkBAIC0xNTUsOSAr
MTgwLDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2luYyhJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogICAgIGVtaXRTdG9yZUludDMyKHNyY0RzdCwgcmVnVDAsIHRydWUpOwogfQogCi12
b2lkIEpJVDo6ZW1pdF9vcF9kZWMoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3Zv
aWQgSklUOjplbWl0X29wX2RlYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewotICAgIGludCBzcmNEc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwor
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVjPigpOworICAg
IGludCBzcmNEc3QgPSBieXRlY29kZS5zcmNEc3Qub2Zmc2V0KCk7CiAKICAgICBlbWl0TG9hZChz
cmNEc3QsIHJlZ1QxLCByZWdUMCk7CiAKQEAgLTE2NiwxMCArMTkyLDE3IEBAIHZvaWQgSklUOjpl
bWl0X29wX2RlYyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGVtaXRTdG9y
ZUludDMyKHNyY0RzdCwgcmVnVDAsIHRydWUpOwogfQogCi12b2lkIEpJVDo6ZW1pdEJpbmFyeURv
dWJsZU9wKE9wY29kZUlEIG9wY29kZUlELCBpbnQgZHN0LCBpbnQgb3AxLCBpbnQgb3AyLCBPcGVy
YW5kVHlwZXMgdHlwZXMsIEp1bXBMaXN0JiBub3RJbnQzMk9wMSwgSnVtcExpc3QmIG5vdEludDMy
T3AyLCBib29sIG9wMUlzSW5SZWdpc3RlcnMsIGJvb2wgb3AySXNJblJlZ2lzdGVycykKK3RlbXBs
YXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjplbWl0QmluYXJ5RG91YmxlT3AoY29uc3QgSW5z
dHJ1Y3Rpb24gKmluc3RydWN0aW9uLCBPcGVyYW5kVHlwZXMgdHlwZXMsIEp1bXBMaXN0JiBub3RJ
bnQzMk9wMSwgSnVtcExpc3QmIG5vdEludDMyT3AyLCBib29sIG9wMUlzSW5SZWdpc3RlcnMsIGJv
b2wgb3AySXNJblJlZ2lzdGVycykKIHsKICAgICBKdW1wTGlzdCBlbmQ7CiAKKyAgICBhdXRvIGJ5
dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOworICAgIGludCBvcGNvZGVJRCA9IE9wOjpv
cGNvZGVJRDsKKyAgICBpbnQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNv
ZGUudGFyZ2V0KTsKKyAgICBpbnQgb3AxID0gYnl0ZWNvZGUubGhzLm9mZnNldCgpOworICAgIGlu
dCBvcDIgPSBieXRlY29kZS5yaHMub2Zmc2V0KCk7CisKICAgICBpZiAoIW5vdEludDMyT3AxLmVt
cHR5KCkpIHsKICAgICAgICAgLy8gRG91YmxlIGNhc2UgMTogT3AxIGlzIG5vdCBpbnQzMjsgT3Ay
IGlzIHVua25vd24uCiAgICAgICAgIG5vdEludDMyT3AxLmxpbmsodGhpcyk7CkBAIC0yMDAsMzUg
KzIzMywzNSBAQCB2b2lkIEpJVDo6ZW1pdEJpbmFyeURvdWJsZU9wKE9wY29kZUlEIG9wY29kZUlE
LCBpbnQgZHN0LCBpbnQgb3AxLCBpbnQgb3AyLCBPcGVyYQogICAgICAgICBzd2l0Y2ggKG9wY29k
ZUlEKSB7CiAgICAgICAgICAgICBjYXNlIG9wX2psZXNzOgogICAgICAgICAgICAgICAgIGVtaXRM
b2FkRG91YmxlKG9wMSwgZnBSZWdUMik7Ci0gICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hE
b3VibGUoRG91YmxlTGVzc1RoYW4sIGZwUmVnVDIsIGZwUmVnVDApLCBkc3QpOworICAgICAgICAg
ICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKERvdWJsZUxlc3NUaGFuLCBmcFJlZ1QyLCBmcFJl
Z1QwKSwgdGFyZ2V0KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ug
b3Bfamxlc3NlcToKICAgICAgICAgICAgICAgICBlbWl0TG9hZERvdWJsZShvcDEsIGZwUmVnVDIp
OwotICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKERvdWJsZUxlc3NUaGFuT3JF
cXVhbCwgZnBSZWdUMiwgZnBSZWdUMCksIGRzdCk7CisgICAgICAgICAgICAgICAgYWRkSnVtcChi
cmFuY2hEb3VibGUoRG91YmxlTGVzc1RoYW5PckVxdWFsLCBmcFJlZ1QyLCBmcFJlZ1QwKSwgdGFy
Z2V0KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ugb3BfamdyZWF0
ZXI6CiAgICAgICAgICAgICAgICAgZW1pdExvYWREb3VibGUob3AxLCBmcFJlZ1QyKTsKLSAgICAg
ICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShEb3VibGVHcmVhdGVyVGhhbiwgZnBSZWdU
MiwgZnBSZWdUMCksIGRzdCk7CisgICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUo
RG91YmxlR3JlYXRlclRoYW4sIGZwUmVnVDIsIGZwUmVnVDApLCB0YXJnZXQpOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBvcF9qZ3JlYXRlcmVxOgogICAgICAgICAg
ICAgICAgIGVtaXRMb2FkRG91YmxlKG9wMSwgZnBSZWdUMik7Ci0gICAgICAgICAgICAgICAgYWRk
SnVtcChicmFuY2hEb3VibGUoRG91YmxlR3JlYXRlclRoYW5PckVxdWFsLCBmcFJlZ1QyLCBmcFJl
Z1QwKSwgZHN0KTsKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShEb3VibGVH
cmVhdGVyVGhhbk9yRXF1YWwsIGZwUmVnVDIsIGZwUmVnVDApLCB0YXJnZXQpOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBvcF9qbmxlc3M6CiAgICAgICAgICAgICAg
ICAgZW1pdExvYWREb3VibGUob3AxLCBmcFJlZ1QyKTsKLSAgICAgICAgICAgICAgICBhZGRKdW1w
KGJyYW5jaERvdWJsZShEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZCwgZnBSZWdUMCwg
ZnBSZWdUMiksIGRzdCk7CisgICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91
YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQsIGZwUmVnVDAsIGZwUmVnVDIpLCB0YXJnZXQp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBvcF9qbmxlc3NlcToK
ICAgICAgICAgICAgICAgICBlbWl0TG9hZERvdWJsZShvcDEsIGZwUmVnVDIpOwotICAgICAgICAg
ICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQsIGZw
UmVnVDAsIGZwUmVnVDIpLCBkc3QpOworICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91
YmxlKERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQsIGZwUmVnVDAsIGZwUmVnVDIpLCB0YXJnZXQp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBvcF9qbmdyZWF0ZXI6
CiAgICAgICAgICAgICAgICAgZW1pdExvYWREb3VibGUob3AxLCBmcFJlZ1QyKTsKLSAgICAgICAg
ICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVu
b3JkZXJlZCwgZnBSZWdUMCwgZnBSZWdUMiksIGRzdCk7CisgICAgICAgICAgICAgICAgYWRkSnVt
cChicmFuY2hEb3VibGUoRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQsIGZwUmVn
VDAsIGZwUmVnVDIpLCB0YXJnZXQpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgY2FzZSBvcF9qbmdyZWF0ZXJlcToKICAgICAgICAgICAgICAgICBlbWl0TG9hZERvdWJsZShv
cDEsIGZwUmVnVDIpOwotICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKERvdWJs
ZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQsIGZwUmVnVDAsIGZwUmVnVDIpLCBkc3QpOworICAgICAg
ICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVy
ZWQsIGZwUmVnVDAsIGZwUmVnVDIpLCB0YXJnZXQpOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwpAQCAtMjU3LDM1ICsyOTAsMzUgQEAgdm9pZCBKSVQ6OmVtaXRCaW5hcnlEb3Vi
bGVPcChPcGNvZGVJRCBvcGNvZGVJRCwgaW50IGRzdCwgaW50IG9wMSwgaW50IG9wMiwgT3BlcmEK
ICAgICAgICAgc3dpdGNoIChvcGNvZGVJRCkgewogICAgICAgICAgICAgY2FzZSBvcF9qbGVzczoK
ICAgICAgICAgICAgICAgICBlbWl0TG9hZERvdWJsZShvcDIsIGZwUmVnVDEpOwotICAgICAgICAg
ICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKERvdWJsZUxlc3NUaGFuLCBmcFJlZ1QwLCBmcFJl
Z1QxKSwgZHN0KTsKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShEb3VibGVM
ZXNzVGhhbiwgZnBSZWdUMCwgZnBSZWdUMSksIHRhcmdldCk7CiAgICAgICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICAgICBjYXNlIG9wX2psZXNzZXE6CiAgICAgICAgICAgICAgICAgZW1pdExv
YWREb3VibGUob3AyLCBmcFJlZ1QxKTsKLSAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERv
dWJsZShEb3VibGVMZXNzVGhhbk9yRXF1YWwsIGZwUmVnVDAsIGZwUmVnVDEpLCBkc3QpOworICAg
ICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKERvdWJsZUxlc3NUaGFuT3JFcXVhbCwg
ZnBSZWdUMCwgZnBSZWdUMSksIHRhcmdldCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICBjYXNlIG9wX2pncmVhdGVyOgogICAgICAgICAgICAgICAgIGVtaXRMb2FkRG91Ymxl
KG9wMiwgZnBSZWdUMSk7Ci0gICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91
YmxlR3JlYXRlclRoYW4sIGZwUmVnVDAsIGZwUmVnVDEpLCBkc3QpOworICAgICAgICAgICAgICAg
IGFkZEp1bXAoYnJhbmNoRG91YmxlKERvdWJsZUdyZWF0ZXJUaGFuLCBmcFJlZ1QwLCBmcFJlZ1Qx
KSwgdGFyZ2V0KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ugb3Bf
amdyZWF0ZXJlcToKICAgICAgICAgICAgICAgICBlbWl0TG9hZERvdWJsZShvcDIsIGZwUmVnVDEp
OwotICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKERvdWJsZUdyZWF0ZXJUaGFu
T3JFcXVhbCwgZnBSZWdUMCwgZnBSZWdUMSksIGRzdCk7CisgICAgICAgICAgICAgICAgYWRkSnVt
cChicmFuY2hEb3VibGUoRG91YmxlR3JlYXRlclRoYW5PckVxdWFsLCBmcFJlZ1QwLCBmcFJlZ1Qx
KSwgdGFyZ2V0KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ugb3Bf
am5sZXNzOgogICAgICAgICAgICAgICAgIGVtaXRMb2FkRG91YmxlKG9wMiwgZnBSZWdUMSk7Ci0g
ICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlTGVzc1RoYW5PckVxdWFs
T3JVbm9yZGVyZWQsIGZwUmVnVDEsIGZwUmVnVDApLCBkc3QpOworICAgICAgICAgICAgICAgIGFk
ZEp1bXAoYnJhbmNoRG91YmxlKERvdWJsZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBmcFJl
Z1QxLCBmcFJlZ1QwKSwgdGFyZ2V0KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIGNhc2Ugb3Bfam5sZXNzZXE6CiAgICAgICAgICAgICAgICAgZW1pdExvYWREb3VibGUob3Ay
LCBmcFJlZ1QxKTsKLSAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShEb3VibGVM
ZXNzVGhhbk9yVW5vcmRlcmVkLCBmcFJlZ1QxLCBmcFJlZ1QwKSwgZHN0KTsKKyAgICAgICAgICAg
ICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkLCBmcFJl
Z1QxLCBmcFJlZ1QwKSwgdGFyZ2V0KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIGNhc2Ugb3Bfam5ncmVhdGVyOgogICAgICAgICAgICAgICAgIGVtaXRMb2FkRG91YmxlKG9w
MiwgZnBSZWdUMSk7Ci0gICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91Ymxl
R3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQsIGZwUmVnVDEsIGZwUmVnVDApLCBkc3QpOwor
ICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKERvdWJsZUdyZWF0ZXJUaGFuT3JF
cXVhbE9yVW5vcmRlcmVkLCBmcFJlZ1QxLCBmcFJlZ1QwKSwgdGFyZ2V0KTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ugb3Bfam5ncmVhdGVyZXE6CiAgICAgICAgICAg
ICAgICAgZW1pdExvYWREb3VibGUob3AyLCBmcFJlZ1QxKTsKLSAgICAgICAgICAgICAgICBhZGRK
dW1wKGJyYW5jaERvdWJsZShEb3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkLCBmcFJlZ1QxLCBm
cFJlZ1QwKSwgZHN0KTsKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShEb3Vi
bGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVkLCBmcFJlZ1QxLCBmcFJlZ1QwKSwgdGFyZ2V0KTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKQEAgLTI5OSwxMiArMzMyLDEzIEBAIHZv
aWQgSklUOjplbWl0QmluYXJ5RG91YmxlT3AoT3Bjb2RlSUQgb3Bjb2RlSUQsIGludCBkc3QsIGlu
dCBvcDEsIGludCBvcDIsIE9wZXJhCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSBCRUdJTjogT1BfTU9EIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi12b2lk
IEpJVDo6ZW1pdF9vcF9tb2QoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQg
SklUOjplbWl0X29wX21vZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewogI2lmIENQVShYODYpCi0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQ7Ci0gICAgaW50IG9wMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0g
ICAgaW50IG9wMiA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgYXV0byBi
eXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcE1vZD4oKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNv
ZGUuZHN0Lm9mZnNldCgpOworICAgIGludCBvcDEgPSBieXRlY29kZS5saHMub2Zmc2V0KCk7Cisg
ICAgaW50IG9wMiA9IGJ5dGVjb2RlLnJocy5vZmZzZXQoKTsKIAogICAgIC8vIE1ha2Ugc3VyZSBy
ZWdpc3RlcnMgYXJlIGNvcnJlY3QgZm9yIHg4NiBJRElWIGluc3RydWN0aW9ucy4KICAgICBBU1NF
UlQocmVnVDAgPT0gWDg2UmVnaXN0ZXJzOjplYXgpOwpAQCAtMzMzLDcgKzM2Nyw3IEBAIHZvaWQg
SklUOjplbWl0X29wX21vZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogI2VuZGlm
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9tb2QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICNpZiBDUFUoWDg2KQog
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VENhbGwzMl82NC5jcHAKaW5kZXggYWVmYWVjY2E3NTYwMTQzZTI0NGRkMzg5MjhmOTA4OTI5OTU3
YzY3NS4uZjE2OThlZTMwZTFjMTQ1NWRlNWQ1NjJiYjNhYzcyOTc1YjRmYzc0MiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcApAQCAtNDUsMTggKzQ1LDE5IEBA
CiAKIG5hbWVzcGFjZSBKU0MgewogCi12b2lkIEpJVDo6ZW1pdFB1dENhbGxSZXN1bHQoSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uKQordGVtcGxhdGU8dHlwZW5hbWUgT3A+Cit2b2lkIEpJVDo6ZW1p
dFB1dENhbGxSZXN1bHQoY29uc3QgT3AmIGJ5dGVjb2RlKQogewotICAgIGludCBkc3QgPSBpbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOwotICAg
IGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOworICAgIGVtaXRTdG9yZShieXRlY29k
ZS5kc3Qub2Zmc2V0KCksIHJlZ1QxLCByZWdUMCk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX3Jl
dChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfcmV0
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgdW5zaWduZWQg
ZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFJldD4oKTsKKyAgICBpbnQgdmFsdWUgPSBieXRl
Y29kZS52YWx1ZS5vZmZzZXQoKTsKIAotICAgIGVtaXRMb2FkKGRzdCwgcmVnVDEsIHJlZ1QwKTsK
KyAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKIAogICAgIGNoZWNrU3RhY2tQb2lu
dGVyQWxpZ25tZW50KCk7CiAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwpAQCAtNjQsOTYg
KzY1LDEyNSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKICAgICByZXQoKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGwoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlKG9wX2NhbGwsIGN1cnJlbnRJbnN0cnVj
dGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xv
d0Nhc2U8T3BDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5k
ZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGwoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
IHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2Uob3BfdGFpbF9jYWxsLCBjdXJyZW50SW5zdHJ1
Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNs
b3dDYXNlPE9wVGFpbENhbGw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0lu
Zm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfZXZhbChJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZShvcF9jYWxsX2V2YWwsIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCk7CisgICAgY29tcGlsZU9wQ2Fs
bFNsb3dDYXNlPE9wQ2FsbEV2YWw+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlu
a0luZm9JbmRleCk7CiB9CiAgCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlKG9wX2NhbGxfdmFyYXJn
cywgY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAg
IGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24s
IGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF90YWlsX2NhbGxfdmFyYXJncyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgY29tcGlsZU9w
Q2FsbFNsb3dDYXNlKG9wX3RhaWxfY2FsbF92YXJhcmdzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0
ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9w
VGFpbENhbGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZv
SW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9h
cmd1bWVudHMoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxf
Zm9yd2FyZF9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBjb21waWxlT3BD
YWxsU2xvd0Nhc2Uob3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzLCBjdXJyZW50SW5zdHJ1
Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNs
b3dDYXNlPE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0
ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAgICAgCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfY29uc3RydWN0X3ZhcmFyZ3MoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9jb25zdHJ1Y3RfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGNvbXBpbGVP
cENhbGxTbG93Q2FzZShvcF9jb25zdHJ1Y3RfdmFyYXJncywgY3VycmVudEluc3RydWN0aW9uLCBp
dGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxP
cENvbnN0cnVjdFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0lu
Zm9JbmRleCsrKTsKIH0KICAgICAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3QoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2Uob3BfY29uc3RydWN0LCBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGls
ZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0PihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1f
Y2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2NhbGwoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX2NhbGwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBjb21waWxlT3BDYWxsKG9w
X2NhbGwsIGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBj
b21waWxlT3BDYWxsPE9wQ2FsbD4oY3VycmVudEluc3RydWN0aW9uLCBtX2NhbGxMaW5rSW5mb0lu
ZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF90YWlsX2NhbGwoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX3RhaWxfY2FsbChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGNvbXBpbGVPcENhbGwob3BfdGFp
bF9jYWxsLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAg
Y29tcGlsZU9wQ2FsbDxPcFRhaWxDYWxsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJ
bmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2NhbGxfZXZhbChJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfY2FsbF9ldmFsKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgY29tcGlsZU9wQ2FsbChv
cF9jYWxsX2V2YWwsIGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCk7Cisg
ICAgY29tcGlsZU9wQ2FsbDxPcENhbGxFdmFsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIG1fY2FsbExp
bmtJbmZvSW5kZXgpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9jYWxsX3ZhcmFyZ3MoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX2NhbGxfdmFyYXJn
cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGNvbXBpbGVP
cENhbGwob3BfY2FsbF92YXJhcmdzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZv
SW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbDxPcENhbGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1
Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX3Rh
aWxfY2FsbF92YXJhcmdzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJ
VDo6ZW1pdF9vcF90YWlsX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewotICAgIGNvbXBpbGVPcENhbGwob3BfdGFpbF9jYWxsX3ZhcmFyZ3MsIGN1
cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BD
YWxsPE9wVGFpbENhbGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZv
SW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3Vt
ZW50cyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3Bf
dGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7Ci0gICAgY29tcGlsZU9wQ2FsbChvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1
bWVudHMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBj
b21waWxlT3BDYWxsPE9wVGFpbENhbGxGb3J3YXJkQXJndW1lbnRzPihjdXJyZW50SW5zdHJ1Y3Rp
b24sIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAgICAgCi12b2lkIEpJVDo6ZW1pdF9vcF9j
b25zdHJ1Y3RfdmFyYXJncyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBK
SVQ6OmVtaXRfb3BfY29uc3RydWN0X3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKLSAgICBjb21waWxlT3BDYWxsKG9wX2NvbnN0cnVjdF92YXJhcmdzLCBj
dXJyZW50SW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9w
Q2FsbDxPcENvbnN0cnVjdFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0lu
Zm9JbmRleCsrKTsKIH0KICAgICAKLXZvaWQgSklUOjplbWl0X29wX2NvbnN0cnVjdChJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfY29uc3RydWN0KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgY29tcGlsZU9wQ2Fs
bChvcF9jb25zdHJ1Y3QsIGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsr
KTsKKyAgICBjb21waWxlT3BDYWxsPE9wQ29uc3RydWN0PihjdXJyZW50SW5zdHJ1Y3Rpb24sIG1f
Y2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjpjb21waWxlU2V0dXBWYXJhcmdz
RnJhbWUoT3Bjb2RlSUQgb3Bjb2RlLCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIENhbGxMaW5r
SW5mbyogaW5mbykKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3N0ZDo6ZW5hYmxlX2lmX3Q8Cisg
ICAgT3A6Om9wY29kZUlEICE9IG9wX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3Bf
Y29uc3RydWN0X3ZhcmFyZ3MKKyAgICAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxsX3Zh
cmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cwor
LCB2b2lkPgorSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIENhbGxM
aW5rSW5mbyopCiB7Ci0gICAgaW50IHRoaXNWYWx1ZSA9IGluc3RydWN0aW9uWzNdLnUub3BlcmFu
ZDsKLSAgICBpbnQgYXJndW1lbnRzID0gaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOwotICAgIGlu
dCBmaXJzdEZyZWVSZWdpc3RlciA9IGluc3RydWN0aW9uWzVdLnUub3BlcmFuZDsKLSAgICBpbnQg
Zmlyc3RWYXJBcmdPZmZzZXQgPSBpbnN0cnVjdGlvbls2XS51Lm9wZXJhbmQ7CisgICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgaW50IGFyZ0Nv
dW50ID0gYnl0ZWNvZGUuYXJnYzsKKyAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtc3RhdGljX2Nh
c3Q8aW50PihieXRlY29kZS5hcmd2KTsKKworICAgIGlmIChPcDo6b3Bjb2RlSUQgPT0gb3BfY2Fs
bCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKKyAgICAgICAgZW1pdExvYWQocmVnaXN0ZXJP
ZmZzZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcygwKSwgcmVnVDAs
IHJlZ1QxKTsKKyAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAg
ICAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDEsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSks
IHJlZ1QxKTsKKyAgICAgICAgc3RvcmUzMihyZWdUMSwgbWV0YWRhdGEuYXJyYXlQcm9maWxlLmFk
ZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsK
KyAgICB9CisKKyAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHJlZ2lzdGVyT2Zmc2V0ICogc2l6ZW9m
KFJlZ2lzdGVyKSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIGNhbGxGcmFtZVJlZ2lzdGVy
LCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoYXJnQ291
bnQpLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFBheWxvYWRPZmZz
ZXQgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
T3A+CitzdGQ6OmVuYWJsZV9pZl90PAorICAgIE9wOjpvcGNvZGVJRCA9PSBvcF9jYWxsX3ZhcmFy
Z3MgfHwgT3A6Om9wY29kZUlEID09IG9wX2NvbnN0cnVjdF92YXJhcmdzCisgICAgfHwgT3A6Om9w
Y29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWls
X2NhbGxfZm9yd2FyZF9hcmd1bWVudHMKKywgdm9pZD4KK0pJVDo6Y29tcGlsZVNldHVwRnJhbWUo
Y29uc3QgT3AmIGJ5dGVjb2RlLCBDYWxsTGlua0luZm8qIGluZm8pCit7CisgICAgT3Bjb2RlSUQg
b3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CisgICAgaW50IHRoaXNWYWx1ZSA9IGJ5dGVjb2RlLnRo
aXNWYWx1ZS5vZmZzZXQoKTsKKyAgICBpbnQgYXJndW1lbnRzID0gYnl0ZWNvZGUuYXJndW1lbnRz
Lm9mZnNldCgpOworICAgIGludCBmaXJzdEZyZWVSZWdpc3RlciA9IGJ5dGVjb2RlLmZpcnN0RnJl
ZS5vZmZzZXQoKTsKKyAgICBpbnQgZmlyc3RWYXJBcmdPZmZzZXQgPSBieXRlY29kZS5maXJzdFZh
ckFyZzsKIAogICAgIGVtaXRMb2FkKGFyZ3VtZW50cywgcmVnVDEsIHJlZ1QwKTsKICAgICBaX0pJ
VE9wZXJhdGlvbl9FSlpaIHNpemVPcGVyYXRpb247Ci0gICAgaWYgKG9wY29kZSA9PSBvcF90YWls
X2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCisgICAgaWYgKE9wOjpvcGNvZGVJRCA9PSBvcF90YWls
X2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCiAgICAgICAgIHNpemVPcGVyYXRpb24gPSBvcGVyYXRp
b25TaXplRnJhbWVGb3JGb3J3YXJkQXJndW1lbnRzOwogICAgIGVsc2UKICAgICAgICAgc2l6ZU9w
ZXJhdGlvbiA9IG9wZXJhdGlvblNpemVGcmFtZUZvclZhcmFyZ3M7CkBAIC0xNjMsNyArMTkzLDcg
QEAgdm9pZCBKSVQ6OmNvbXBpbGVTZXR1cFZhcmFyZ3NGcmFtZShPcGNvZGVJRCBvcGNvZGUsIElu
c3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgQ2EKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC0oc2l6
ZW9mKENhbGxlckZyYW1lQW5kUEMpICsgV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxp
Z25tZW50Qnl0ZXMoKSwgNiAqIHNpemVvZih2b2lkKikpKSksIHJlZ1QxLCBzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7CiAgICAgZW1pdExvYWQoYXJndW1lbnRzLCByZWdUMiwgcmVnVDQpOwogICAgIEZf
SklUT3BlcmF0aW9uX0VGSlpaIHNldHVwT3BlcmF0aW9uOwotICAgIGlmIChvcGNvZGUgPT0gb3Bf
dGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQorICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWls
X2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCiAgICAgICAgIHNldHVwT3BlcmF0aW9uID0gb3BlcmF0
aW9uU2V0dXBGb3J3YXJkQXJndW1lbnRzRnJhbWU7CiAgICAgZWxzZQogICAgICAgICBzZXR1cE9w
ZXJhdGlvbiA9IG9wZXJhdGlvblNldHVwVmFyYXJnc0ZyYW1lOwpAQCAtMTg1LDcgKzIxNSwxNCBA
QCB2b2lkIEpJVDo6Y29tcGlsZVNldHVwVmFyYXJnc0ZyYW1lKE9wY29kZUlEIG9wY29kZSwgSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBDYQogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9m
KENhbGxlckZyYW1lQW5kUEMpKSwgcmVnVDEsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIH0KIAot
dm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCit0ZW1w
bGF0ZTx0eXBlbmFtZSBPcD4KK2Jvb2wgSklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3AmKQor
eworICAgIHJldHVybiBmYWxzZTsKK30KKwordGVtcGxhdGU8PgorYm9vbCBKSVQ6OmNvbXBpbGVD
YWxsRXZhbChjb25zdCBPcENhbGxFdmFsJiBieXRlY29kZSkKIHsKICAgICBhZGRQdHIoVHJ1c3Rl
ZEltbTMyKC1zdGF0aWNfY2FzdDxwdHJkaWZmX3Q+KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkp
LCBzdGFja1BvaW50ZXJSZWdpc3RlciwgcmVnVDEpOwogICAgIHN0b3JlUHRyKGNhbGxGcmFtZVJl
Z2lzdGVyLCBBZGRyZXNzKHJlZ1QxLCBDYWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsK
QEAgLTE5OCwxOCArMjM1LDIxIEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWwoSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uKQogCiAgICAgc2FtcGxlQ29kZUJsb2NrKG1fY29kZUJsb2NrKTsKICAg
ICAKLSAgICBlbWl0UHV0Q2FsbFJlc3VsdChpbnN0cnVjdGlvbik7CisgICAgZW1pdFB1dENhbGxS
ZXN1bHQoYnl0ZWNvZGUpOworCisgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSklUOjpjb21w
aWxlQ2FsbEV2YWxTbG93Q2FzZShJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xv
d0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKKyAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wQ2FsbEV2YWw+KCk7CiAgICAgQ2Fs
bExpbmtJbmZvKiBpbmZvID0gbV9jb2RlQmxvY2stPmFkZENhbGxMaW5rSW5mbygpOwogICAgIGlu
Zm8tPnNldFVwQ2FsbChDYWxsTGlua0luZm86OkNhbGwsIENvZGVPcmlnaW4obV9ieXRlY29kZU9m
ZnNldCksIHJlZ1QwKTsKIAotICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1pbnN0cnVjdGlvbls0
XS51Lm9wZXJhbmQ7Ci0gICAgaW50IGNhbGxlZSA9IGluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsK
KyAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtYnl0ZWNvZGUuYXJndjsKKyAgICBpbnQgY2FsbGVl
ID0gYnl0ZWNvZGUuY2FsbGVlLm9mZnNldCgpOwogCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihy
ZWdpc3Rlck9mZnNldCAqIHNpemVvZihSZWdpc3RlcikgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQ
QykpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCkBAIC0yMjAs
MTIgKzI2MCwxNSBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeQogCiAgICAgc2FtcGxlQ29kZUJs
b2NrKG1fY29kZUJsb2NrKTsKICAgICAKLSAgICBlbWl0UHV0Q2FsbFJlc3VsdChpbnN0cnVjdGlv
bik7CisgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOwogfQogCi12b2lkIEpJVDo6Y29t
cGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJRCwgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCB1
bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQg
SklUOjpjb21waWxlT3BDYWxsKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgdW5zaWdu
ZWQgY2FsbExpbmtJbmZvSW5kZXgpCiB7Ci0gICAgaW50IGNhbGxlZSA9IGluc3RydWN0aW9uWzJd
LnUub3BlcmFuZDsKKyAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKKyAgICBh
dXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOworICAgIGludCBjYWxsZWUgPSBi
eXRlY29kZS5jYWxsZWUub2Zmc2V0KCk7CiAKICAgICAvKiBDYWxsZXIgYWx3YXlzOgogICAgICAg
ICAtIFVwZGF0ZXMgY2FsbEZyYW1lUmVnaXN0ZXIgdG8gY2FsbGVlIGNhbGxGcmFtZS4KQEAgLTI0
MiwyNCArMjg1LDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2RlSUQs
IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgdW5zaWduZWQgY2EKICAgICBDYWxsTGlua0luZm8q
IGluZm8gPSBudWxscHRyOwogICAgIGlmIChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwpCiAgICAg
ICAgIGluZm8gPSBtX2NvZGVCbG9jay0+YWRkQ2FsbExpbmtJbmZvKCk7Ci0gICAgaWYgKG9wY29k
ZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3RfdmFyYXJn
cyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90
YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCi0gICAgICAgIGNvbXBpbGVTZXR1cFZhcmFyZ3NG
cmFtZShvcGNvZGVJRCwgaW5zdHJ1Y3Rpb24sIGluZm8pOwotICAgIGVsc2UgewotICAgICAgICBp
bnQgYXJnQ291bnQgPSBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCByZWdp
c3Rlck9mZnNldCA9IC1pbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7Ci0gICAgICAgIAotICAgICAg
ICBpZiAob3Bjb2RlSUQgPT0gb3BfY2FsbCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAg
ICAgICAgICAgIGVtaXRMb2FkKHJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9m
ZnNldEluY2x1ZGluZ1RoaXMoMCksIHJlZ1QwLCByZWdUMSk7Ci0gICAgICAgICAgICBKdW1wIGRv
bmUgPSBicmFuY2hJZk5vdENlbGwocmVnVDApOwotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNz
KHJlZ1QxLCBKU0NlbGw6OnN0cnVjdHVyZUlET2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgICAgICAg
ICBzdG9yZVB0cihyZWdUMSwgYXJyYXlQcm9maWxlRm9yPE9wQ2FsbFNoYXBlPihpbnN0cnVjdGlv
biktPmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlSUQoKSk7Ci0gICAgICAgICAgICBkb25lLmxp
bmsodGhpcyk7Ci0gICAgICAgIH0KLSAgICAKLSAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihy
ZWdpc3Rlck9mZnNldCAqIHNpemVvZihSZWdpc3RlcikgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQ
QykpLCBjYWxsRnJhbWVSZWdpc3Rlciwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotCi0gICAgICAg
IHN0b3JlMzIoVHJ1c3RlZEltbTMyKGFyZ0NvdW50KSwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdp
c3RlciwgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCAqIHN0YXRpY19jYXN0PGludD4oc2l6
ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2FkT2Zmc2V0IC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMp
KSk7Ci0gICAgfSAvLyBTUCBob2xkcyBuZXdDYWxsRnJhbWUgKyBzaXplb2YoQ2FsbGVyRnJhbWVB
bmRQQyksIHdpdGggQXJndW1lbnRDb3VudCBpbml0aWFsaXplZC4KKyAgICBjb21waWxlU2V0dXBG
cmFtZShieXRlY29kZSwgaW5mbyk7CisgICAgLy8gU1AgaG9sZHMgbmV3Q2FsbEZyYW1lICsgc2l6
ZW9mKENhbGxlckZyYW1lQW5kUEMpLCB3aXRoIEFyZ3VtZW50Q291bnQgaW5pdGlhbGl6ZWQuCiAg
ICAgCiAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChpbnN0cnVjdGlv
bikuYml0cygpOwogICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIHRhZ0Zv
cihDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSk7CkBAIC0yNjgsOCArMjk1LDcgQEAgdm9p
ZCBKSVQ6OmNvbXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2RlSUQsIEluc3RydWN0aW9uKiBpbnN0
cnVjdGlvbiwgdW5zaWduZWQgY2EKICAgICBzdG9yZTMyKHJlZ1QwLCBBZGRyZXNzKHN0YWNrUG9p
bnRlclJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90OjpjYWxsZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNp
emVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBD
KSkpOwogICAgIHN0b3JlMzIocmVnVDEsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIENh
bGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkg
KyBUYWdPZmZzZXQgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKIAotICAgIGlmIChvcGNv
ZGVJRCA9PSBvcF9jYWxsX2V2YWwpIHsKLSAgICAgICAgY29tcGlsZUNhbGxFdmFsKGluc3RydWN0
aW9uKTsKKyAgICBpZiAoY29tcGlsZUNhbGxFdmFsKGJ5dGVjb2RlKSkgewogICAgICAgICByZXR1
cm47CiAgICAgfQogCkBAIC0zMDIsMTEgKzMyOCwxNCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2Fs
bChPcGNvZGVJRCBvcGNvZGVJRCwgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCB1bnNpZ25lZCBj
YQogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAKICAgICBzYW1wbGVDb2RlQmxv
Y2sobV9jb2RlQmxvY2spOwotICAgIGVtaXRQdXRDYWxsUmVzdWx0KGluc3RydWN0aW9uKTsKKyAg
ICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CiB9CiAKLXZvaWQgSklUOjpjb21waWxlT3BD
YWxsU2xvd0Nhc2UoT3Bjb2RlSUQgb3Bjb2RlSUQsIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgdW5zaWduZWQgY2FsbExpbmtJ
bmZvSW5kZXgpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Cit2b2lkIEpJVDo6Y29tcGlsZU9wQ2Fs
bFNsb3dDYXNlKGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlciwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpCiB7Cisg
ICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7CisKICAgICBpZiAob3Bjb2RlSUQg
PT0gb3BfY2FsbF9ldmFsKSB7CiAgICAgICAgIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGluc3Ry
dWN0aW9uLCBpdGVyKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMzE2LDcgKzM0NSw3IEBAIHZvaWQg
SklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoT3Bjb2RlSUQgb3Bjb2RlSUQsIEluc3RydWN0aW9u
KiBpbnN0cnVjdGlvbiwgVmVjCiAKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jYWxsQ29tcGls
YXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsTGlua0luZm8pLCByZWdUMik7CiAKLSAg
ICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2Fs
bF92YXJhcmdzKQorICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQg
PT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2Zvcndh
cmRfYXJndW1lbnRzKQogICAgICAgICBlbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAKICAgICBt
X2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxSZXR1cm5Mb2NhdGlv
biA9IGVtaXROYWtlZENhbGwobV92bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9y
KS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+KCkpOwpAQCAtMzMwLDcgKzM1OSw5IEBAIHZvaWQgSklU
Ojpjb21waWxlT3BDYWxsU2xvd0Nhc2UoT3Bjb2RlSUQgb3Bjb2RlSUQsIEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbiwgVmVjCiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAg
IHNhbXBsZUNvZGVCbG9jayhtX2NvZGVCbG9jayk7Ci0gICAgZW1pdFB1dENhbGxSZXN1bHQoaW5z
dHJ1Y3Rpb24pOworCisgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsK
KyAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpT
QwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAppbmRleCA2ODk3NzA5ZWE5MWYw
MmI1YTUyNTAyY2I5NWE4MWY2YWIyNGY5ZTExLi5kNmM3YjdmYTc4OGNjMzY4Mjc4Y2VkYzYxMzQ3
ZWFkNmQzMDFiMTI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElu
bGluZXMuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaApAQCAt
MjYsNyArMjYsNiBAQAogI3ByYWdtYSBvbmNlCiAKICNpZiBFTkFCTEUoSklUKQotCiAjaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTEzMSw3ICsxMzAsNyBAQCBB
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjp1cGRhdGVUb3BDYWxsRnJhbWUoKQogewogICAgIEFTU0VS
VChzdGF0aWNfY2FzdDxpbnQ+KG1fYnl0ZWNvZGVPZmZzZXQpID49IDApOwogI2lmIFVTRShKU1ZB
TFVFMzJfNjQpCi0gICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gJm1fY29kZUJsb2NrLT5p
bnN0cnVjdGlvbnMoKVttX2J5dGVjb2RlT2Zmc2V0XTsgCisgICAgY29uc3QgSW5zdHJ1Y3Rpb24q
IGluc3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVP
ZmZzZXQpLnB0cigpOwogICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgo
aW5zdHJ1Y3Rpb24pLmJpdHMoKTsKICNlbHNlCiAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0g
Q2FsbFNpdGVJbmRleChtX2J5dGVjb2RlT2Zmc2V0KS5iaXRzKCk7CkBAIC03MDYsNiArNzA1LDgg
QEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90TnVtYmVyKFJl
Z2lzdGVySUQgcmVnKQogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZykpOwog
fQogCisjZW5kaWYgLy8gVVNFKEpTVkFMVUUzMl82NCkKKwogQUxXQVlTX0lOTElORSBpbnQgSklU
OjpqdW1wVGFyZ2V0KGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgaW50IHRhcmdldCkK
IHsKICAgICBpZiAodGFyZ2V0KQpAQCAtNzM2LDggKzczNyw2IEBAIEFMV0FZU19JTkxJTkUgQXJp
dGhQcm9maWxlIEpJVDo6Y29waWVkQXJpdGhQcm9maWxlKEJpbmFyeU9wIGJ5dGVjb2RlKQogICAg
IHJldHVybiBhcml0aFByb2ZpbGU7CiB9CiAKLSNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQot
CiB9IC8vIG5hbWVzcGFjZSBKU0MKIAogI2VuZGlmIC8vIEVOQUJMRShKSVQpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAppbmRleCBjZDQ4ZDUxYzQ3NDFkZTdjMDdmMDE5
ZWQ1YTZmNTNjNGUzZjBhOWUxLi44MDFhNmE4MjIxNTI3ZDhhODJmMmUzNTFlYzE4MTgzOTVkNzM2
NjBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKQEAgLTY1MSw3
ICs2NTEsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BDYXRjaD4oKTsKLSAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKIAogICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21F
bnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0oKS0+dG9wRW50cnlGcmFtZSk7CiAKQEAgLTY3
OSw2ICs2NzgsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogICAgIC8vIGFyZ3VtZW50IHR5cGUgcHJvb2ZzLCBzdG9yaW5n
IGxvY2FscyB0byB0aGUgYnVmZmVyLCBldGMKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTk4CiAKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKICAgICBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVy
KiBidWZmZXIgPSBtZXRhZGF0YS5idWZmZXI7CiAgICAgaWYgKGJ1ZmZlciB8fCAhc2hvdWxkRW1p
dFByb2ZpbGluZygpKQogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeU9TUkVudGVy
QXRDYXRjaCwgbV9ieXRlY29kZU9mZnNldCk7CkBAIC0xMDE2LDYgKzEwMTYsNyBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfbG9vcF9oaW50KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbAogICAgICAgICBlbWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIGN1cnJl
bnRJbnN0cnVjdGlvbi0+c2l6ZSgpKTsKICAgICB9CiAjZWxzZQorICAgIFVOVVNFRF9QQVJBTShj
dXJyZW50SW5zdHJ1Y3Rpb24pOwogICAgIFVOVVNFRF9QQVJBTShpdGVyKTsKICNlbmRpZgogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3BwCmluZGV4IGVm
MDMxMDJlYzYxMDk2ZjkyZjY1NzE2MDQ2NmE2ZWNjNzkyNTdiYWQuLjg3YzFmYTA3MjllMTBhMmI4
ZGVlNGE1NTczMmFkNDBhNDQ2NDE4YWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wY29kZXMzMl82NC5jcHAKQEAgLTQ3LDEwICs0NywxMSBAQAogCiBuYW1lc3BhY2UgSlND
IHsKIAotdm9pZCBKSVQ6OmVtaXRfb3BfbW92KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCit2b2lkIEpJVDo6ZW1pdF9vcF9tb3YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKLSAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZDsKLSAgICBpbnQgc3JjID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE1vdj4oKTsKKyAgICBpbnQg
ZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOworICAgIGludCBzcmMgPSBieXRlY29kZS5zcmMu
b2Zmc2V0KCk7CiAgICAgCiAgICAgaWYgKG1fY29kZUJsb2NrLT5pc0NvbnN0YW50UmVnaXN0ZXJJ
bmRleChzcmMpKQogICAgICAgICBlbWl0U3RvcmUoZHN0LCBnZXRDb25zdGFudE9wZXJhbmQoc3Jj
KSk7CkBAIC02MCwyNCArNjEsMjggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbW92KEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgfQogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9lbmQo
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX2VuZChj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIEFTU0VSVChyZXR1
cm5WYWx1ZUdQUiAhPSBjYWxsRnJhbWVSZWdpc3Rlcik7Ci0gICAgZW1pdExvYWQoY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZCwgcmVnVDEsIHJldHVyblZhbHVlR1BSKTsKKyAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEVuZD4oKTsKKyAgICBlbWl0TG9h
ZChieXRlY29kZS52YWx1ZS5vZmZzZXQoKSwgcmVnVDEsIHJldHVyblZhbHVlR1BSKTsKICAgICBl
bWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgZW1pdEZ1bmN0aW9uRXBpbG9ndWUoKTsKICAg
ICByZXQoKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3Bfam1wKEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9qbXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSm1wPigpOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVu
dEluc3RydWN0aW9uLCBieXRlY29kZS50YXJnZXQpOwogICAgIGFkZEp1bXAoanVtcCgpLCB0YXJn
ZXQpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS0+c3RydWN0
dXJlKCk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdP
YmplY3Q+KCk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jayk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5vYmplY3RBbGxvY2F0
aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKICAgICBzaXplX3QgYWxsb2NhdGlvblNpemUgPSBKU0Zp
bmFsT2JqZWN0OjphbGxvY2F0aW9uU2l6ZShzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwog
ICAgIEFsbG9jYXRvciBhbGxvY2F0b3IgPSBzdWJzcGFjZUZvcjxKU0ZpbmFsT2JqZWN0PigqbV92
bSktPmFsbG9jYXRvckZvck5vblZpcnR1YWwoYWxsb2NhdGlvblNpemUsIEFsbG9jYXRvckZvck1v
ZGU6OkFsbG9jYXRvcklmRXhpc3RzKTsKIApAQCAtOTMsMjYgKzk4LDI4IEBAIHZvaWQgSklUOjpl
bWl0X29wX25ld19vYmplY3QoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICAg
ICAgZW1pdEFsbG9jYXRlSlNPYmplY3QocmVzdWx0UmVnLCBKSVRBbGxvY2F0b3I6OmNvbnN0YW50
KGFsbG9jYXRvciksIGFsbG9jYXRvclJlZywgVHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBidXR0
ZXJmbHksIHNjcmF0Y2hSZWcsIHNsb3dDYXNlcyk7CiAgICAgICAgIGVtaXRJbml0aWFsaXplSW5s
aW5lU3RvcmFnZShyZXN1bHRSZWcsIHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAg
ICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0gICAgICAgIGVtaXRTdG9yZUNlbGwoY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgcmVzdWx0UmVnKTsKKyAgICAgICAgZW1pdFN0b3Jl
Q2VsbChieXRlY29kZS5kc3Qub2Zmc2V0KCksIHJlc3VsdFJlZyk7CiAgICAgfQogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfbmV3X29iamVjdChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwogCi0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQ7Ci0gICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
M10udS5vYmplY3RBbGxvY2F0aW9uUHJvZmlsZS0+c3RydWN0dXJlKCk7CisgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXdPYmplY3Q+KCk7CisgICAgYXV0byYg
bWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgaW50IGRzdCA9
IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFk
YXRhLm9iamVjdEFsbG9jYXRpb25Qcm9maWxlLnN0cnVjdHVyZSgpOwogICAgIGNhbGxPcGVyYXRp
b24ob3BlcmF0aW9uTmV3T2JqZWN0LCBzdHJ1Y3R1cmUpOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0
LCByZXR1cm5WYWx1ZUdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19oYXNf
aW5zdGFuY2UoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0
X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKLSAgICBhdXRvJiBieXRlY29kZSA9ICpyZWludGVycHJldF9jYXN0PE9wT3Zl
cnJpZGVzSGFzSW5zdGFuY2UqPihjdXJyZW50SW5zdHJ1Y3Rpb24pOwotICAgIGludCBkc3QgPSBi
eXRlY29kZS5kc3QoKTsKLSAgICBpbnQgY29uc3RydWN0b3IgPSBieXRlY29kZS5jb25zdHJ1Y3Rv
cigpOwotICAgIGludCBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUuaGFzSW5zdGFuY2VWYWx1
ZSgpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wT3ZlcnJp
ZGVzSGFzSW5zdGFuY2U+KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsK
KyAgICBpbnQgY29uc3RydWN0b3IgPSBieXRlY29kZS5jb25zdHJ1Y3Rvci5vZmZzZXQoKTsKKyAg
ICBpbnQgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLmhhc0luc3RhbmNlVmFsdWUub2Zmc2V0
KCk7CiAKICAgICBlbWl0TG9hZFBheWxvYWQoaGFzSW5zdGFuY2VWYWx1ZSwgcmVnVDApOwogICAg
IC8vIFdlIGRvbid0IGp1bXAgaWYgd2Uga25vdyB3aGF0IFN5bWJvbC5oYXNJbnN0YW5jZSB3b3Vs
ZCBkby4KQEAgLTEzNSwxMiArMTQyLDEyIEBAIHZvaWQgSklUOjplbWl0X29wX292ZXJyaWRlc19o
YXNfaW5zdGFuY2UoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIAogfQogCi12b2lk
IEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
Cit2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0byYgYnl0ZWNvZGUgPSAqcmVpbnRlcnByZXRfY2FzdDxP
cEluc3RhbmNlb2YqPihjdXJyZW50SW5zdHJ1Y3Rpb24pOwotICAgIGludCBkc3QgPSBieXRlY29k
ZS5kc3QoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS52YWx1ZSgpOwotICAgIGludCBwcm90
byA9IGJ5dGVjb2RlLnByb3RvdHlwZSgpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0
Lm9mZnNldCgpOworICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLnZhbHVlLm9mZnNldCgpOworICAg
IGludCBwcm90byA9IGJ5dGVjb2RlLnByb3RvdHlwZS5vZmZzZXQoKTsKIAogICAgIC8vIExvYWQg
dGhlIG9wZXJhbmRzIGludG8gcmVnaXN0ZXJzLgogICAgIC8vIFdlIHVzZSByZWdUMCBmb3IgYmFz
ZVZhbCBzaW5jZSB3ZSB3aWxsIGJlIGRvbmUgd2l0aCB0aGlzIGZpcnN0LCBhbmQgd2UgY2FuIHRo
ZW4gdXNlIGl0IGZvciB0aGUgcmVzdWx0LgpAQCAtMTY0LDIwICsxNzEsMjAgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfaW5zdGFuY2VvZihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAg
IGVtaXRTdG9yZUJvb2woZHN0LCByZWdUMCk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2luc3Rh
bmNlb2ZfY3VzdG9tKEluc3RydWN0aW9uKikKK3ZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2Zf
Y3VzdG9tKGNvbnN0IEluc3RydWN0aW9uKikKIHsKICAgICAvLyBUaGlzIGFsd2F5cyBnb2VzIHRv
IHNsb3cgcGF0aCBzaW5jZSB3ZSBleHBlY3QgaXQgdG8gYmUgcmFyZS4KICAgICBhZGRTbG93Q2Fz
ZShqdW1wKCkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKIHsKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgIAotICAgIGF1dG8mIGJ5
dGVjb2RlID0gKnJlaW50ZXJwcmV0X2Nhc3Q8T3BJbnN0YW5jZW9mKj4oY3VycmVudEluc3RydWN0
aW9uKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0KCk7Ci0gICAgaW50IHZhbHVlID0gYnl0
ZWNvZGUudmFsdWUoKTsKLSAgICBpbnQgcHJvdG8gPSBieXRlY29kZS5wcm90b3R5cGUoKTsKKyAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2Y+KCk7
CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKKyAgICBpbnQgdmFsdWUgPSBi
eXRlY29kZS52YWx1ZS5vZmZzZXQoKTsKKyAgICBpbnQgcHJvdG8gPSBieXRlY29kZS5wcm90b3R5
cGUub2Zmc2V0KCk7CiAgICAgCiAgICAgSklUSW5zdGFuY2VPZkdlbmVyYXRvciYgZ2VuID0gbV9p
bnN0YW5jZU9mc1ttX2luc3RhbmNlT2ZJbmRleCsrXTsKICAgICAKQEAgLTE4OCwxNSArMTk1LDE1
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChj
b2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNl
b2ZfY3VzdG9tKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2Vv
Zl9jdXN0b20oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0
ZXIpOwogCi0gICAgYXV0byYgYnl0ZWNvZGUgPSAqcmVpbnRlcnByZXRfY2FzdDxPcEluc3RhbmNl
b2ZDdXN0b20qPihjdXJyZW50SW5zdHJ1Y3Rpb24pOwotICAgIGludCBkc3QgPSBieXRlY29kZS5k
c3QoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29kZS52YWx1ZSgpOwotICAgIGludCBjb25zdHJ1
Y3RvciA9IGJ5dGVjb2RlLmNvbnN0cnVjdG9yKCk7Ci0gICAgaW50IGhhc0luc3RhbmNlVmFsdWUg
PSBieXRlY29kZS5oYXNJbnN0YW5jZVZhbHVlKCk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mQ3VzdG9tPigpOworICAgIGludCBkc3QgPSBi
eXRlY29kZS5kc3Qub2Zmc2V0KCk7CisgICAgaW50IHZhbHVlID0gYnl0ZWNvZGUudmFsdWUub2Zm
c2V0KCk7CisgICAgaW50IGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUuY29uc3RydWN0b3Iub2Zmc2V0
KCk7CisgICAgaW50IGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5oYXNJbnN0YW5jZVZhbHVl
Lm9mZnNldCgpOwogCiAgICAgZW1pdExvYWQodmFsdWUsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1p
dExvYWRQYXlsb2FkKGNvbnN0cnVjdG9yLCByZWdUMik7CkBAIC0yMDUsMTAgKzIxMiwxMSBAQCB2
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9jdXN0b20oSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPAogICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZXR1cm5WYWx1
ZUdQUik7CiB9CiAgICAgCi12b2lkIEpJVDo6ZW1pdF9vcF9pc19lbXB0eShJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfaXNfZW1wdHkoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBpbnQgZHN0ID0gY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSXNFbXB0eT4oKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwor
ICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm9wZXJhbmQub2Zmc2V0KCk7CiAgICAgCiAgICAgZW1p
dExvYWQodmFsdWUsIHJlZ1QxLCByZWdUMCk7CiAgICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMSwg
VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkVtcHR5VmFsdWVUYWcpLCByZWdUMCk7CkBAIC0yMTYsMTAg
KzIyNCwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19lbXB0eShJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZWdUMCk7CiB9CiAKLXZvaWQg
SklUOjplbWl0X29wX2lzX3VuZGVmaW5lZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQordm9pZCBKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQ7Ci0gICAgaW50IHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzVW5kZWZp
bmVkPigpOworICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7CisgICAgaW50IHZh
bHVlID0gYnl0ZWNvZGUub3BlcmFuZC5vZmZzZXQoKTsKICAgICAKICAgICBlbWl0TG9hZCh2YWx1
ZSwgcmVnVDEsIHJlZ1QwKTsKICAgICBKdW1wIGlzQ2VsbCA9IGJyYW5jaElmQ2VsbChyZWdUMSk7
CkBAIC0yNDMsMjAgKzI1MiwyMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWQoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmVn
VDApOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9pc19ib29sZWFuKEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9pc19ib29sZWFuKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHZhbHVlID0gY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcElzQm9vbGVhbj4oKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwor
ICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm9wZXJhbmQub2Zmc2V0KCk7CiAgICAgCiAgICAgZW1p
dExvYWRUYWcodmFsdWUsIHJlZ1QwKTsKICAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ1QwLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6Qm9vbGVhblRhZyksIHJlZ1QwKTsKICAgICBlbWl0U3RvcmVCb29s
KGRzdCwgcmVnVDApOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX2lzX251bWJlcihjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGludCBkc3QgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCB2YWx1ZSA9IGN1cnJlbnRJbnN0
cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BJc051bWJlcj4oKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNl
dCgpOworICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm9wZXJhbmQub2Zmc2V0KCk7CiAgICAgCiAg
ICAgZW1pdExvYWRUYWcodmFsdWUsIHJlZ1QwKTsKICAgICBhZGQzMihUcnVzdGVkSW1tMzIoMSks
IHJlZ1QwKTsKQEAgLTI2NCwxMSArMjc1LDEyIEBAIHZvaWQgSklUOjplbWl0X29wX2lzX251bWJl
cihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGVtaXRTdG9yZUJvb2woZHN0
LCByZWdUMCk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2lzX2NlbGxfd2l0aF90eXBlKEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9pc19jZWxsX3dp
dGhfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGlu
dCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCB2YWx1ZSA9
IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHR5cGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSXNDZWxsV2l0aFR5cGU+KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2Rl
LmRzdC5vZmZzZXQoKTsKKyAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5vcGVyYW5kLm9mZnNldCgp
OworICAgIGludCB0eXBlID0gYnl0ZWNvZGUudHlwZTsKIAogICAgIGVtaXRMb2FkKHZhbHVlLCBy
ZWdUMSwgcmVnVDApOwogICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1Qx
KTsKQEAgLTI4MywxMCArMjk1LDExIEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2NlbGxfd2l0aF90
eXBlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdFN0b3JlQm9vbChk
c3QsIHJlZ1QwKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0KEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9pc19vYmplY3QoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBpbnQgZHN0ID0gY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSXNPYmplY3Q+KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQo
KTsKKyAgICBpbnQgdmFsdWUgPSBieXRlY29kZS5vcGVyYW5kLm9mZnNldCgpOwogCiAgICAgZW1p
dExvYWQodmFsdWUsIHJlZ1QxLCByZWdUMCk7CiAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJ
Zk5vdENlbGwocmVnVDEpOwpAQCAtMzAxLDEwICszMTQsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
aXNfb2JqZWN0KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdFN0b3Jl
Qm9vbChkc3QsIHJlZ1QwKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF90b19wcmlt
aXRpdmUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBpbnQg
ZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgc3JjID0gY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcFRvUHJpbWl0aXZlPigpOworICAgIGludCBkc3QgPSBieXRlY29k
ZS5kc3Qub2Zmc2V0KCk7CisgICAgaW50IHNyYyA9IGJ5dGVjb2RlLnNyYy5vZmZzZXQoKTsKIAog
ICAgIGVtaXRMb2FkKHNyYywgcmVnVDEsIHJlZ1QwKTsKIApAQCAtMzE2LDE5ICszMzAsMjEgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiAgICAgICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7CiB9CiAKLXZvaWQg
SklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9zZXRfZnVuY3Rpb25fbmFtZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGludCBmdW5jID0gY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgbmFtZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQ7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BTZXRGdW5jdGlvbk5hbWU+KCk7CisgICAgaW50IGZ1bmMgPSBieXRlY29kZS5mdW5jdGlvbi5v
ZmZzZXQoKTsKKyAgICBpbnQgbmFtZSA9IGJ5dGVjb2RlLm5hbWUub2Zmc2V0KCk7CiAgICAgZW1p
dExvYWRQYXlsb2FkKGZ1bmMsIHJlZ1QxKTsKICAgICBlbWl0TG9hZChuYW1lLCByZWdUMywgcmVn
VDIpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uU2V0RnVuY3Rpb25OYW1lLCByZWdUMSwg
SlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX25vdChJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3Bfbm90KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaW50IGRzdCA9IGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHNyYyA9IGN1cnJlbnRJbnN0
cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BOb3Q+KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsK
KyAgICBpbnQgc3JjID0gYnl0ZWNvZGUub3BlcmFuZC5vZmZzZXQoKTsKIAogICAgIGVtaXRMb2Fk
VGFnKHNyYywgcmVnVDApOwogCkBAIC0zMzksMTAgKzM1NSwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9ub3QoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBlbWl0U3RvcmVCb29s
KGRzdCwgcmVnVDAsIChkc3QgPT0gc3JjKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2pmYWxz
ZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfamZh
bHNlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaW50IGNv
bmQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZmFsc2U+KCk7CisgICAgaW50IGNvbmQgPSBieXRl
Y29kZS5jb25kaXRpb24ub2Zmc2V0KCk7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdl
dChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLnRhcmdldCk7CiAKICAgICBlbWl0TG9hZChj
b25kLCByZWdUMSwgcmVnVDApOwogCkBAIC0zNTMsMTAgKzM3MCwxMSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9qZmFsc2UoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhZGRKdW1w
KGJyYW5jaElmRmFsc2V5KCp2bSgpLCB2YWx1ZSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1Qw
LCBmcFJlZ1QxLCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2Nr
LT5nbG9iYWxPYmplY3QoKSksIHRhcmdldCk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2p0cnVl
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGludCBjb25k
ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICB1bnNpZ25lZCB0YXJnZXQg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSnRydWU+KCk7CisgICAgaW50IGNvbmQgPSBieXRlY29k
ZS5jb25kaXRpb24ub2Zmc2V0KCk7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLnRhcmdldCk7CiAKICAgICBlbWl0TG9hZChjb25k
LCByZWdUMSwgcmVnVDApOwogICAgIGJvb2wgc2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZp
bmVkID0gdHJ1ZTsKQEAgLTM2NiwxMCArMzg0LDExIEBAIHZvaWQgSklUOjplbWl0X29wX2p0cnVl
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYWRkSnVtcChicmFuY2hJZlRy
dXRoeSgqdm0oKSwgdmFsdWUsIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwg
c2hvdWxkQ2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2Jq
ZWN0KCkpLCB0YXJnZXQpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBpbnQgc3JjID0gY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxTnVsbD4oKTsKKyAgICBpbnQgc3JjID0gYnl0ZWNvZGUudmFs
dWUub2Zmc2V0KCk7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGJ5dGVjb2RlLnRhcmdldCk7CiAKICAgICBlbWl0TG9hZChzcmMsIHJlZ1QxLCBy
ZWdUMCk7CiAKQEAgLTM5MSwxMCArNDEwLDExIEBAIHZvaWQgSklUOjplbWl0X29wX2plcV9udWxs
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgbWFzcXVlcmFkZXNHbG9iYWxP
YmplY3RJc0ZvcmVpZ24ubGluayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9u
dWxsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9q
bmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBp
bnQgc3JjID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICB1bnNpZ25lZCB0
YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcU51bGw+KCk7CisgICAgaW50IHNyYyA9
IGJ5dGVjb2RlLnZhbHVlLm9mZnNldCgpOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJn
ZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS50YXJnZXQpOwogCiAgICAgZW1pdExvYWQo
c3JjLCByZWdUMSwgcmVnVDApOwogCkBAIC00MTYsMjYgKzQzNiwzMCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9qbmVxX251bGwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICB3YXNO
b3RJbW1lZGlhdGUubGluayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9wdHIo
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX2puZXFf
cHRyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaW50IHNy
YyA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgU3BlY2lhbDo6UG9pbnRl
ciBwdHIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5zcGVjaWFsUG9pbnRlcjsKLSAgICB1bnNp
Z25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcVB0cj4oKTsKKyAgICBhdXRv
JiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBpbnQgc3Jj
ID0gYnl0ZWNvZGUudmFsdWUub2Zmc2V0KCk7CisgICAgU3BlY2lhbDo6UG9pbnRlciBwdHIgPSBi
eXRlY29kZS5zcGVjaWFsUG9pbnRlcjsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUudGFyZ2V0KTsKIAogICAgIGVtaXRMb2FkKHNy
YywgcmVnVDEsIHJlZ1QwKTsKICAgICBKdW1wIG5vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVn
VDEpOwogICAgIEp1bXAgZXF1YWwgPSBicmFuY2hQdHIoRXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
UHRyKGFjdHVhbFBvaW50ZXJGb3IobV9jb2RlQmxvY2ssIHB0cikpKTsKICAgICBub3RDZWxsLmxp
bmsodGhpcyk7Ci0gICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoMSksICZjdXJyZW50SW5zdHJ1Y3Rp
b25bNF0udS5vcGVyYW5kKTsKKyAgICBzdG9yZTgoVHJ1c3RlZEltbTMyKDEpLCAmbWV0YWRhdGEu
aGFzSnVtcGVkKTsKICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKICAgICBlcXVhbC5saW5r
KHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9lcShJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKLSAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZDsKLSAgICBpbnQgc3JjMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7
Ci0gICAgaW50IHNyYzIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+KCk7CisKKyAgICBpbnQg
ZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOworICAgIGludCBzcmMxID0gYnl0ZWNvZGUubGhz
Lm9mZnNldCgpOworICAgIGludCBzcmMyID0gYnl0ZWNvZGUucmhzLm9mZnNldCgpOwogCiAgICAg
ZW1pdExvYWQyKHNyYzEsIHJlZ1QxLCByZWdUMCwgc3JjMiwgcmVnVDMsIHJlZ1QyKTsKICAgICBh
ZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIHJlZ1QzKSk7CkBAIC00NDcsOSAr
NDcxLDEwIEBAIHZvaWQgSklUOjplbWl0X29wX2VxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiAgICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QwKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX2VxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZXEoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEVxPigpOworICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7CiAKICAgICBKdW1w
TGlzdCBzdG9yZVJlc3VsdDsKICAgICBKdW1wTGlzdCBnZW5lcmljQ2FzZTsKQEAgLTQ3MywxMSAr
NDk4LDEyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9lcShJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46CiAgICAgZW1pdFN0b3JlQm9vbChkc3Qs
IHJldHVyblZhbHVlR1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfamVxKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9qZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBpbnQgdGFyZ2V0ID0gY3VycmVudElu
c3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICBpbnQgc3JjMSA9IGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHNyYzIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5v
cGVyYW5kOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVx
PigpOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9u
LCBieXRlY29kZS50YXJnZXQpOworICAgIGludCBzcmMxID0gYnl0ZWNvZGUubGhzLm9mZnNldCgp
OworICAgIGludCBzcmMyID0gYnl0ZWNvZGUucmhzLm9mZnNldCgpOwogCiAgICAgZW1pdExvYWQy
KHNyYzEsIHJlZ1QxLCByZWdUMCwgc3JjMiwgcmVnVDMsIHJlZ1QyKTsKICAgICBhZGRTbG93Q2Fz
ZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIHJlZ1QzKSk7CkBAIC01MTIsMTYgKzUzOCwxOSBA
QCB2b2lkIEpJVDo6Y29tcGlsZU9wRXFKdW1wU2xvdyhWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyLCBDb21waWxlT3BFcQogICAgIGRvbmUubGluayh0aGlzKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2plcShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2plcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGNvbXBpbGVPcEVxSnVtcFNsb3co
aXRlciwgQ29tcGlsZU9wRXFUeXBlOjpFcSwgY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFu
ZCk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7
CisgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLnRhcmdldCk7CisgICAgY29tcGlsZU9wRXFKdW1wU2xvdyhpdGVyLCBDb21waWxlT3BF
cVR5cGU6OkVxLCB0YXJnZXQpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9uZXEoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX25lcShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGludCBkc3QgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBzcmMxID0gY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZDsKLSAgICBpbnQgc3JjMiA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9w
ZXJhbmQ7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXE+
KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKKyAgICBpbnQgc3JjMSA9
IGJ5dGVjb2RlLmxocy5vZmZzZXQoKTsKKyAgICBpbnQgc3JjMiA9IGJ5dGVjb2RlLnJocy5vZmZz
ZXQoKTsKIAogICAgIGVtaXRMb2FkMihzcmMxLCByZWdUMSwgcmVnVDAsIHNyYzIsIHJlZ1QzLCBy
ZWdUMik7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMykp
OwpAQCAtNTMzLDkgKzU2MiwxMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXEoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmVnVDApOwogfQog
Ci12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgaW50IGRzdCA9IGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BOZXE+KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZz
ZXQoKTsKIAogICAgIEp1bXBMaXN0IHN0b3JlUmVzdWx0OwogICAgIEp1bXBMaXN0IGdlbmVyaWND
YXNlOwpAQCAtNTYwLDExICs1OTAsMTIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT4KICAgICBl
bWl0U3RvcmVCb29sKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9v
cF9qbmVxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9v
cF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaW50
IHRhcmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHNyYzEg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBzcmMyID0gY3VycmVu
dEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEpuZXE+KCk7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdl
dChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLnRhcmdldCk7CisgICAgaW50IHNyYzEgPSBi
eXRlY29kZS5saHMub2Zmc2V0KCk7CisgICAgaW50IHNyYzIgPSBieXRlY29kZS5yaHMub2Zmc2V0
KCk7CiAKICAgICBlbWl0TG9hZDIoc3JjMSwgcmVnVDEsIHJlZ1QwLCBzcmMyLCByZWdUMywgcmVn
VDIpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDMpKTsK
QEAgLTU3NCwxNiArNjA1LDIwIEBAIHZvaWQgSklUOjplbWl0X29wX2puZXEoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhZGRKdW1wKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdU
MCwgcmVnVDIpLCB0YXJnZXQpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5lcShJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZXEoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKIHsKLSAgICBjb21waWxlT3BFcUp1bXBTbG93KGl0ZXIsIENvbXBpbGVPcEVxVHlwZTo6TkVx
LCBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEpuZXE+KCk7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0g
anVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLnRhcmdldCk7CisgICAgY29t
cGlsZU9wRXFKdW1wU2xvdyhpdGVyLCBDb21waWxlT3BFcVR5cGU6Ok5FcSwgdGFyZ2V0KTsKIH0K
IAotdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIENvbXBpbGVPcFN0cmljdEVxVHlwZSB0eXBlKQordGVtcGxhdGUgPHR5cGVuYW1lIE9w
Pgordm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIENvbXBpbGVPcFN0cmljdEVxVHlwZSB0eXBlKQogewotICAgIGludCBkc3Qg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBzcmMxID0gY3VycmVu
dEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICBpbnQgc3JjMiA9IGN1cnJlbnRJbnN0cnVj
dGlvblszXS51Lm9wZXJhbmQ7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3A+KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKKyAgICBp
bnQgc3JjMSA9IGJ5dGVjb2RlLmxocy5vZmZzZXQoKTsKKyAgICBpbnQgc3JjMiA9IGJ5dGVjb2Rl
LnJocy5vZmZzZXQoKTsKIAogICAgIGVtaXRMb2FkMihzcmMxLCByZWdUMSwgcmVnVDAsIHNyYzIs
IHJlZ1QzLCByZWdUMik7CiAKQEAgLTYwNywyMSArNjQyLDIzIEBAIHZvaWQgSklUOjpjb21waWxl
T3BTdHJpY3RFcShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBDb21waWxlT3BTdHJp
Y3RFcVR5CiAgICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QwKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRfb3Bfc3RyaWN0ZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklU
OjplbWl0X29wX3N0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7Ci0gICAgY29tcGlsZU9wU3RyaWN0RXEoY3VycmVudEluc3RydWN0aW9uLCBDb21waWxlT3BT
dHJpY3RFcVR5cGU6OlN0cmljdEVxKTsKKyAgICBjb21waWxlT3BTdHJpY3RFcTxPcFN0cmljdGVx
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpOwog
fQogCi12b2lkIEpJVDo6ZW1pdF9vcF9uc3RyaWN0ZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX25zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewotICAgIGNvbXBpbGVPcFN0cmljdEVxKGN1cnJlbnRJbnN0
cnVjdGlvbiwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEpOworICAgIGNvbXBpbGVP
cFN0cmljdEVxPE9wTnN0cmljdGVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIENvbXBpbGVPcFN0cmlj
dEVxVHlwZTo6TlN0cmljdEVxKTsKIH0KIAotdm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVxSnVt
cChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBDb21waWxlT3BTdHJpY3RFcVR5cGUg
dHlwZSkKK3RlbXBsYXRlPHR5cGVuYW1lIE9wPgordm9pZCBKSVQ6OmNvbXBpbGVPcFN0cmljdEVx
SnVtcChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBDb21waWxlT3BTdHJp
Y3RFcVR5cGUgdHlwZSkKIHsKLSAgICBpbnQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNd
LnUub3BlcmFuZDsKLSAgICBpbnQgc3JjMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQ7Ci0gICAgaW50IHNyYzIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOworICAgIGludCB0
YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUudGFyZ2V0KTsK
KyAgICBpbnQgc3JjMSA9IGJ5dGVjb2RlLmxocy5vZmZzZXQoKTsKKyAgICBpbnQgc3JjMiA9IGJ5
dGVjb2RlLnJocy5vZmZzZXQoKTsKIAogICAgIGVtaXRMb2FkMihzcmMxLCByZWdUMSwgcmVnVDAs
IHNyYzIsIHJlZ1QzLCByZWdUMik7CiAKQEAgLTY0MywzOCArNjgwLDQxIEBAIHZvaWQgSklUOjpj
b21waWxlT3BTdHJpY3RFcUp1bXAoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29t
cGlsZU9wU3RyaWN0CiAgICAgICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBy
ZWdUMiksIHRhcmdldCk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2pzdHJpY3RlcShJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfanN0cmljdGVxKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgY29tcGlsZU9wU3Ry
aWN0RXFKdW1wKGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJp
Y3RFcSk7CisgICAgY29tcGlsZU9wU3RyaWN0RXFKdW1wPE9wSnN0cmljdGVxPihjdXJyZW50SW5z
dHJ1Y3Rpb24sIENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdF9vcF9qbnN0cmljdGVxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2
b2lkIEpJVDo6ZW1pdF9vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7Ci0gICAgY29tcGlsZU9wU3RyaWN0RXFKdW1wKGN1cnJlbnRJbnN0cnVjdGlv
biwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpOU3RyaWN0RXEpOworICAgIGNvbXBpbGVPcFN0cmlj
dEVxSnVtcDxPcEpuc3RyaWN0ZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29tcGlsZU9wU3RyaWN0
RXFUeXBlOjpOU3RyaWN0RXEpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVx
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfanN0cmljdGVxKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCiB7CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAotICAgIHVuc2ln
bmVkIHRhcmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKc3RyaWN0ZXE+KCk7CisgICAgdW5z
aWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLnRh
cmdldCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikpOwogICAgIGVt
aXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMihOb25aZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRh
cmdldCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQogewogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICB1bnNpZ25lZCB0YXJnZXQg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5zdHJpY3RlcT4oKTsKKyAgICB1bnNpZ25lZCB0YXJn
ZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUudGFyZ2V0KTsKICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgSlNWYWx1ZVJlZ3MocmVn
VDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgZW1pdEp1bXBTbG93
VG9Ib3QoYnJhbmNoVGVzdDMyKFplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0KTsKIH0KIAot
dm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQordm9pZCBKSVQ6OmVtaXRfb3BfZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kOwotICAgIGludCBzcmMgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXFOdWxsPigpOworICAg
IGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7CisgICAgaW50IHNyYyA9IGJ5dGVjb2Rl
Lm9wZXJhbmQub2Zmc2V0KCk7CiAKICAgICBlbWl0TG9hZChzcmMsIHJlZ1QxLCByZWdUMCk7CiAg
ICAgSnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMSk7CkBAIC03MDIsMTAg
Kzc0MiwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QxKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRfb3BfbmVxX251bGwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3Zv
aWQgSklUOjplbWl0X29wX25lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7
Ci0gICAgaW50IHNyYyA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BOZXFOdWxsPigpOworICAgIGlu
dCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7CisgICAgaW50IHNyYyA9IGJ5dGVjb2RlLm9w
ZXJhbmQub2Zmc2V0KCk7CiAKICAgICBlbWl0TG9hZChzcmMsIHJlZ1QxLCByZWdUMCk7CiAgICAg
SnVtcCBpc0ltbWVkaWF0ZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMSk7CkBAIC03MzMsMTkgKzc3
NCwyMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXFfbnVsbChJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZWdUMSk7CiB9CiAKLXZvaWQgSklU
OjplbWl0X29wX3Rocm93KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJ
VDo6ZW1pdF9vcF90aHJvdyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
eworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVGhyb3c+KCk7
CiAgICAgQVNTRVJUKHJlZ1QwID09IHJldHVyblZhbHVlR1BSKTsKICAgICBjb3B5Q2FsbGVlU2F2
ZXNUb0VudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSgpLT50b3BFbnRyeUZyYW1lKTsKLSAg
ICBlbWl0TG9hZChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZWdUMSwgcmVnVDAp
OworICAgIGVtaXRMb2FkKGJ5dGVjb2RlLnZhbHVlLm9mZnNldCgpLCByZWdUMSwgcmVnVDApOwog
ICAgIGNhbGxPcGVyYXRpb25Ob0V4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvblRocm93LCBKU1ZhbHVl
UmVncyhyZWdUMSwgcmVnVDApKTsKICAgICBqdW1wVG9FeGNlcHRpb25IYW5kbGVyKCp2bSgpKTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZDsKLSAgICBpbnQgc3JjID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvTnVt
YmVyPigpOworICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7CisgICAgaW50IHNy
YyA9IGJ5dGVjb2RlLm9wZXJhbmQub2Zmc2V0KCk7CiAKICAgICBlbWl0TG9hZChzcmMsIHJlZ1Qx
LCByZWdUMCk7CiAKQEAgLTc1MywxNSArNzk2LDE2IEBAIHZvaWQgSklUOjplbWl0X29wX3RvX251
bWJlcihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGFkZFNsb3dDYXNlKGJy
YW5jaDMyKEFib3ZlT3JFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpMb3dlc3RU
YWcpKSk7CiAgICAgaXNJbnQzMi5saW5rKHRoaXMpOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZSgpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spKTsKICAgICBpZiAoc3JjICE9IGRzdCkKICAgICAgICAgZW1pdFN0b3JlKGRzdCwg
cmVnVDEsIHJlZ1QwKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfdG9fc3RyaW5nKEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF90b19zdHJpbmcoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBpbnQgZHN0ID0gY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgc3JjID0gY3VycmVudEluc3Ry
dWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFRvU3RyaW5nPigpOworICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0
KCk7CisgICAgaW50IHNyYyA9IGJ5dGVjb2RlLm9wZXJhbmQub2Zmc2V0KCk7CiAKICAgICBlbWl0
TG9hZChzcmMsIHJlZ1QxLCByZWdUMCk7CiAKQEAgLTc3MiwyMyArODE2LDI2IEBAIHZvaWQgSklU
OjplbWl0X29wX3RvX3N0cmluZyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAg
ICAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwogfQogCi12b2lkIEpJVDo6ZW1pdF9v
cF90b19vYmplY3QoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjpl
bWl0X29wX3RvX29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGlu
dCBzcmMgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9PYmplY3Q+KCk7CisgICAgaW50IGRzdCA9
IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKKyAgICBpbnQgc3JjID0gYnl0ZWNvZGUub3BlcmFuZC5v
ZmZzZXQoKTsKIAogICAgIGVtaXRMb2FkKHNyYywgcmVnVDEsIHJlZ1QwKTsKIAogICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90Q2VsbChyZWdUMSkpOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElm
Tm90T2JqZWN0KHJlZ1QwKSk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7CisgICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwog
ICAgIGlmIChzcmMgIT0gZHN0KQogICAgICAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDAp
OwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcENhdGNoPigpOworCiAgICAgcmVzdG9yZUNhbGxlZVNhdmVzRnJvbUVudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlcih2bSgpLT50b3BFbnRyeUZyYW1lKTsKIAogICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihtX3ZtKSwgcmVnVDMpOwpAQCAtODExLDEzICs4NTgsMTMgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfY2F0Y2goSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIAogICAgIHN0b3Jl
MzIoVHJ1c3RlZEltbTMyKDApLCBBZGRyZXNzKHJlZ1QzLCBWTTo6ZXhjZXB0aW9uT2Zmc2V0KCkp
KTsKIAotICAgIHVuc2lnbmVkIGV4Y2VwdGlvbiA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQ7CisgICAgdW5zaWduZWQgZXhjZXB0aW9uID0gYnl0ZWNvZGUuZXhjZXB0aW9uLm9mZnNl
dCgpOwogICAgIGVtaXRTdG9yZShleGNlcHRpb24sIHJlZ1QxLCByZWdUMik7CiAKICAgICBsb2Fk
MzIoQWRkcmVzcyhyZWdUMiwgRXhjZXB0aW9uOjp2YWx1ZU9mZnNldCgpICsgT0JKRUNUX09GRlNF
VE9GKEpTVmFsdWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVnVDApOwogICAgIGxvYWQzMihBZGRy
ZXNzKHJlZ1QyLCBFeGNlcHRpb246OnZhbHVlT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0YoSlNW
YWx1ZSwgdS5hc0JpdHMudGFnKSksIHJlZ1QxKTsKIAotICAgIHVuc2lnbmVkIHRocm93blZhbHVl
ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICB1bnNpZ25lZCB0aHJvd25W
YWx1ZSA9IGJ5dGVjb2RlLnRocm93blZhbHVlLm9mZnNldCgpOwogICAgIGVtaXRTdG9yZSh0aHJv
d25WYWx1ZSwgcmVnVDEsIHJlZ1QwKTsKIAogI2lmIEVOQUJMRShERkdfSklUKQpAQCAtODI1LDcg
Kzg3Miw4IEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiAgICAgLy8gYXJndW1lbnQgdHlwZSBwcm9vZnMsIHN0b3JpbmcgbG9jYWxzIHRv
IHRoZSBidWZmZXIsIGV0YwogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNzU1OTgKIAotICAgIFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIqIGJ1ZmZl
ciA9IHN0YXRpY19jYXN0PFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIqPihjdXJyZW50SW5z
dHJ1Y3Rpb25bM10udS5wb2ludGVyKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyKiBi
dWZmZXIgPSBtZXRhZGF0YS5idWZmZXI7CiAgICAgaWYgKGJ1ZmZlciB8fCAhc2hvdWxkRW1pdFBy
b2ZpbGluZygpKQogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblRyeU9TUkVudGVyQXRD
YXRjaCwgbV9ieXRlY29kZU9mZnNldCk7CiAgICAgZWxzZQpAQCAtODQ0LDI0ICs4OTIsMjYgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
ICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfaWRlbnRp
dHlfd2l0aF9wcm9maWxlKEluc3RydWN0aW9uKikKK3ZvaWQgSklUOjplbWl0X29wX2lkZW50aXR5
X3dpdGhfcHJvZmlsZShjb25zdCBJbnN0cnVjdGlvbiopCiB7CiAgICAgLy8gV2UgZG9uJ3QgbmVl
ZCB0byBkbyBhbnl0aGluZyBoZXJlLi4uCiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2dldF9wYXJl
bnRfc2NvcGUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0
X29wX2dldF9wYXJlbnRfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKLSAgICBpbnQgY3VycmVudFNjb3BlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFBh
cmVudFNjb3BlPigpOworICAgIGludCBjdXJyZW50U2NvcGUgPSBieXRlY29kZS5zY29wZS5vZmZz
ZXQoKTsKICAgICBlbWl0TG9hZFBheWxvYWQoY3VycmVudFNjb3BlLCByZWdUMCk7CiAgICAgbG9h
ZFB0cihBZGRyZXNzKHJlZ1QwLCBKU1Njb3BlOjpvZmZzZXRPZk5leHQoKSksIHJlZ1QwKTsKLSAg
ICBlbWl0U3RvcmVDZWxsKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHJlZ1QwKTsK
KyAgICBlbWl0U3RvcmVDZWxsKGJ5dGVjb2RlLmRzdC5vZmZzZXQoKSwgcmVnVDApOwogfQogCi12
b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCit2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgc2l6ZV90IHRhYmxlSW5kZXggPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIHVuc2lnbmVkIGRlZmF1bHRPZmZzZXQgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIHVuc2lnbmVkIHNjcnV0aW5lZSA9IGN1cnJl
bnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BTd2l0Y2hJbW0+KCk7CisgICAgc2l6ZV90IHRhYmxlSW5kZXggPSBi
eXRlY29kZS50YWJsZUluZGV4OworICAgIHVuc2lnbmVkIGRlZmF1bHRPZmZzZXQgPSBqdW1wVGFy
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUuZGVmYXVsdE9mZnNldCk7CisgICAgdW5z
aWduZWQgc2NydXRpbmVlID0gYnl0ZWNvZGUuc2NydXRpbmVlLm9mZnNldCgpOwogCiAgICAgLy8g
Y3JlYXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dp
dGNoIHN0YXRlbWVudC4KICAgICBTaW1wbGVKdW1wVGFibGUqIGp1bXBUYWJsZSA9ICZtX2NvZGVC
bG9jay0+c3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwpAQCAtODczLDExICs5MjMsMTIgQEAg
dm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX2ltbShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogICAgIGp1bXAocmV0dXJuVmFsdWVHUFIsIE5vUHRyVGFnKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRfb3Bfc3dpdGNoX2NoYXIoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3Zv
aWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7Ci0gICAgc2l6ZV90IHRhYmxlSW5kZXggPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kOwotICAgIHVuc2lnbmVkIGRlZmF1bHRPZmZzZXQgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIHVuc2lnbmVkIHNjcnV0aW5lZSA9IGN1cnJlbnRJbnN0
cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BTd2l0Y2hDaGFyPigpOworICAgIHNpemVfdCB0YWJsZUluZGV4ID0gYnl0ZWNv
ZGUudGFibGVJbmRleDsKKyAgICB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLmRlZmF1bHRPZmZzZXQpOworICAgIHVuc2lnbmVk
IHNjcnV0aW5lZSA9IGJ5dGVjb2RlLnNjcnV0aW5lZS5vZmZzZXQoKTsKIAogICAgIC8vIGNyZWF0
ZSBqdW1wIHRhYmxlIGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBz
dGF0ZW1lbnQuCiAgICAgU2ltcGxlSnVtcFRhYmxlKiBqdW1wVGFibGUgPSAmbV9jb2RlQmxvY2st
PnN3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KTsKQEAgLTg4OSwxMSArOTQwLDEyIEBAIHZvaWQg
SklUOjplbWl0X29wX3N3aXRjaF9jaGFyKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiAgICAganVtcChyZXR1cm5WYWx1ZUdQUiwgTm9QdHJUYWcpOwogfQogCi12b2lkIEpJVDo6ZW1p
dF9vcF9zd2l0Y2hfc3RyaW5nKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lk
IEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7Ci0gICAgc2l6ZV90IHRhYmxlSW5kZXggPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kOwotICAgIHVuc2lnbmVkIGRlZmF1bHRPZmZzZXQgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIHVuc2lnbmVkIHNjcnV0aW5lZSA9IGN1cnJlbnRJbnN0
cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BTd2l0Y2hTdHJpbmc+KCk7CisgICAgc2l6ZV90IHRhYmxlSW5kZXggPSBieXRl
Y29kZS50YWJsZUluZGV4OworICAgIHVuc2lnbmVkIGRlZmF1bHRPZmZzZXQgPSBqdW1wVGFyZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUuZGVmYXVsdE9mZnNldCk7CisgICAgdW5zaWdu
ZWQgc2NydXRpbmVlID0gYnl0ZWNvZGUuc2NydXRpbmVlLm9mZnNldCgpOwogCiAgICAgLy8gY3Jl
YXRlIGp1bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNo
IHN0YXRlbWVudC4KICAgICBTdHJpbmdKdW1wVGFibGUqIGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9j
ay0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwpAQCAtOTA0LDQxICs5NTYsNDUg
QEAgdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogICAgIGp1bXAocmV0dXJuVmFsdWVHUFIsIE5vUHRyVGFnKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRfb3BfZGVidWcoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3Zv
aWQgSklUOjplbWl0X29wX2RlYnVnKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWJ1
Zz4oKTsKICAgICBsb2FkMzIoY29kZUJsb2NrKCktPmRlYnVnZ2VyUmVxdWVzdHNBZGRyZXNzKCks
IHJlZ1QwKTsKICAgICBKdW1wIG5vRGVidWdnZXJSZXF1ZXN0cyA9IGJyYW5jaFRlc3QzMihaZXJv
LCByZWdUMCk7Ci0gICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWJ1ZywgY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZCk7CisgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWJ1Zywg
c3RhdGljX2Nhc3Q8aW50PihieXRlY29kZS5kZWJ1Z0hvb2tUeXBlKSk7CiAgICAgbm9EZWJ1Z2dl
clJlcXVlc3RzLmxpbmsodGhpcyk7CiB9CiAKIAotdm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX2VudGVyKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgZW1pdEVudGVyT3B0
aW1pemF0aW9uQ2hlY2soKTsKICAgICAKICAgICAvLyBFdmVuIHRob3VnaCBKSVQgY29kZSBkb2Vz
bid0IHVzZSB0aGVtLCB3ZSBpbml0aWFsaXplIG91ciBjb25zdGFudAogICAgIC8vIHJlZ2lzdGVy
cyB0byB6YXAgc3RhbGUgcG9pbnRlcnMsIHRvIGF2b2lkIHVubmVjZXNzYXJpbHkgcHJvbG9uZ2lu
ZwogICAgIC8vIG9iamVjdCBsaWZldGltZSBhbmQgaW5jcmVhc2luZyBHQyBwcmVzc3VyZS4KLSAg
ICBmb3IgKGludCBpID0gMDsgaSA8IG1fY29kZUJsb2NrLT5udW1WYXJzKCk7ICsraSkKKyAgICBm
b3IgKGludCBpID0gQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0
dWFsUmVnaXN0ZXJzKCk7IGkgPCBtX2NvZGVCbG9jay0+bnVtVmFycygpOyArK2kpCiAgICAgICAg
IGVtaXRTdG9yZSh2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbChpKS5vZmZzZXQoKSwganNVbmRlZmlu
ZWQoKSk7CiAKICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgc2xvd19wYXRoX2VudGVyKTsKICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwog
fQogCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfc2NvcGUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX2dldF9zY29wZShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0U2NvcGU+KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKICAg
ICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihDYWxsRnJhbWVTbG90OjpjYWxsZWUsIHJl
Z1QwKTsKICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTRnVuY3Rpb246Om9mZnNldE9mU2Nv
cGVDaGFpbigpKSwgcmVnVDApOwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZWdUMCk7CiB9CiAK
LXZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewotICAgIGludCBjYWxsZWUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kOwotICAgIFdyaXRlQmFycmllckJhc2U8SlNDZWxsPiogY2FjaGVkRnVu
Y3Rpb24gPSAmY3VycmVudEluc3RydWN0aW9uWzRdLnUuanNDZWxsOworICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ3JlYXRlVGhpcz4oKTsKKyAgICBhdXRvJiBt
ZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBpbnQgY2FsbGVl
ID0gYnl0ZWNvZGUuY2FsbGVlLm9mZnNldCgpOworICAgIFdyaXRlQmFycmllckJhc2U8SlNDZWxs
PiogY2FjaGVkRnVuY3Rpb24gPSAmbWV0YWRhdGEuY2FjaGVkQ2FsbGVlOwogICAgIFJlZ2lzdGVy
SUQgY2FsbGVlUmVnID0gcmVnVDA7CiAgICAgUmVnaXN0ZXJJRCByYXJlRGF0YVJlZyA9IHJlZ1Q0
OwogICAgIFJlZ2lzdGVySUQgcmVzdWx0UmVnID0gcmVnVDA7CkBAIC05NjcsMTAgKzEwMjMsMTAg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKICAgICBsb2FkMzIoQWRkcmVzcyhzY3JhdGNoUmVnLCBGdW5jdGlvblJhcmVEYXRh
OjpvZmZzZXRPZk9iamVjdEFsbG9jYXRpb25Qcm9maWxlKCkgKyBPYmplY3RBbGxvY2F0aW9uUHJv
ZmlsZTo6b2Zmc2V0T2ZJbmxpbmVDYXBhY2l0eSgpKSwgc2NyYXRjaFJlZyk7CiAgICAgZW1pdElu
aXRpYWxpemVJbmxpbmVTdG9yYWdlKHJlc3VsdFJlZywgc2NyYXRjaFJlZyk7CiAgICAgYWRkU2xv
d0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICBlbWl0U3RvcmVDZWxsKGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQsIHJlc3VsdFJlZyk7CisgICAgZW1pdFN0b3JlQ2VsbChieXRlY29kZS5kc3Qu
b2Zmc2V0KCksIHJlc3VsdFJlZyk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX3RvX3RoaXMoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX3RvX3RoaXMo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRvVGhpcz4oKTsKICAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKQEAgLTk4NiwxNyArMTA0Miwx
OSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoUHRyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDIp
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfY2hlY2tfdGR6KEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9jaGVja190ZHooY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBlbWl0TG9hZFRhZyhjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kLCByZWdUMCk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BDaGVja1Rkej4oKTsKKyAgICBlbWl0TG9hZFRhZyhieXRlY29kZS50
YXJnZXQub2Zmc2V0KCksIHJlZ1QwKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJl
Z1QwKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX2hhc19zdHJ1
Y3R1cmVfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
LSAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQg
YmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgaW50IGVudW1lcmF0
b3IgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOworICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzU3RydWN0dXJlUHJvcGVydHk+KCk7CisgICAg
aW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKKyAgICBpbnQgYmFzZSA9IGJ5dGVjb2Rl
LmJhc2Uub2Zmc2V0KCk7CisgICAgaW50IGVudW1lcmF0b3IgPSBieXRlY29kZS5lbnVtZXJhdG9y
Lm9mZnNldCgpOwogCiAgICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QwKTsKICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSk7CkBAIC0xMDEyLDcgKzEwNzAsNyBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiAKIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0
eShCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0dXJuQWRkcmVzc1B0ciByZXR1cm5BZGRyZXNzLCBK
SVRBcnJheU1vZGUgYXJyYXlNb2RlKQogewotICAgIEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24gPSAmbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpW2J5VmFsSW5mby0+Ynl0ZWNvZGVJ
bmRleF07CisgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29k
ZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXgpLnB0cigp
OwogICAgIAogICAgIFBhdGNoYWJsZUp1bXAgYmFkVHlwZTsKICAgICAKQEAgLTEwMzcsMTIgKzEw
OTUsMTQgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KEJ5VmFs
SW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHQKICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVw
YXRjaENhbGwoQ29kZUxvY2F0aW9uQ2FsbDxOb1B0clRhZz4oTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
PE5vUHRyVGFnPihyZXR1cm5BZGRyZXNzKSksIEZ1bmN0aW9uUHRyPE9wZXJhdGlvblB0clRhZz4o
b3BlcmF0aW9uSGFzSW5kZXhlZFByb3BlcnR5R2VuZXJpYykpOwogfQogCi12b2lkIEpJVDo6ZW1p
dF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQordm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQ7Ci0gICAgaW50IHByb3BlcnR5ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3Bl
cmFuZDsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBhcnJheVByb2ZpbGVGb3I8T3BIYXNJ
bmRleGVkUHJvcGVydHlTaGFwZT4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhhc0luZGV4ZWRQcm9wZXJ0eT4oKTsKKyAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBp
bnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOworICAgIGludCBiYXNlID0gYnl0ZWNvZGUu
YmFzZS5vZmZzZXQoKTsKKyAgICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5wcm9wZXJ0eS5vZmZz
ZXQoKTsKKyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0YWRhdGEuYXJyYXlQcm9maWxl
OwogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9jb2RlQmxvY2stPmFkZEJ5VmFsSW5mbygp
OwogICAgIAogICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMCk7CkBAIC0xMDgxLDEzICsx
MTQxLDE0IEBAIHZvaWQgSklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBl
bmQoQnlWYWxDb21waWxhdGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlT2Zmc2V0LCBQYXRj
aGFibGVKdW1wKCksIGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUsIGRvbmUsIG5leHRIb3RQYXRoKSk7
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAotICAgIGlu
dCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBiYXNlID0g
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICBpbnQgcHJvcGVydHkgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5PigpOworICAgIGludCBkc3QgPSBi
eXRlY29kZS5kc3Qub2Zmc2V0KCk7CisgICAgaW50IGJhc2UgPSBieXRlY29kZS5iYXNlLm9mZnNl
dCgpOworICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLnByb3BlcnR5Lm9mZnNldCgpOwogICAg
IEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5z
dHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwogCiAgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgp
OwpAQCAtMTEwMSwxMiArMTE2MiwxMyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4
ZWRfcHJvcGVydHkoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdAogICAgIG1f
YnlWYWxJbnN0cnVjdGlvbkluZGV4Kys7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2dldF9kaXJl
Y3RfcG5hbWUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0
X29wX2dldF9kaXJlY3RfcG5hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKLSAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAg
ICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgaW50IGlu
ZGV4ID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZDsKLSAgICBpbnQgZW51bWVyYXRv
ciA9IGN1cnJlbnRJbnN0cnVjdGlvbls1XS51Lm9wZXJhbmQ7CisgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXREaXJlY3RQbmFtZT4oKTsKKyAgICBpbnQgZHN0
ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOworICAgIGludCBiYXNlID0gYnl0ZWNvZGUuYmFzZS5v
ZmZzZXQoKTsKKyAgICBpbnQgaW5kZXggPSBieXRlY29kZS5pbmRleC5vZmZzZXQoKTsKKyAgICBp
bnQgZW51bWVyYXRvciA9IGJ5dGVjb2RlLmVudW1lcmF0b3Iub2Zmc2V0KCk7CiAKICAgICAvLyBD
aGVjayB0aGF0IGJhc2UgaXMgYSBjZWxsCiAgICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1Qw
KTsKQEAgLTExMzcsMTUgKzExOTksMTYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2RpcmVjdF9w
bmFtZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGxvYWQzMihCYXNlSW5k
ZXgocmVnVDAsIHJlZ1QyLCBUaW1lc0VpZ2h0LCBvZmZzZXRPZkZpcnN0UHJvcGVydHkgKyBPQkpF
Q1RfT0ZGU0VUT0YoSlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZWdUMCk7CiAgICAgCiAg
ICAgZG9uZS5saW5rKHRoaXMpOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKKyAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7CiAg
ICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3Bf
ZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKK3ZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IGVudW1lcmF0b3IgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGludCBpbmRleCA9IGN1cnJlbnRJbnN0cnVjdGlv
blszXS51Lm9wZXJhbmQ7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BFbnVtZXJhdG9yU3RydWN0dXJlUG5hbWU+KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2Rl
LmRzdC5vZmZzZXQoKTsKKyAgICBpbnQgZW51bWVyYXRvciA9IGJ5dGVjb2RlLmVudW1lcmF0b3Iu
b2Zmc2V0KCk7CisgICAgaW50IGluZGV4ID0gYnl0ZWNvZGUuaW5kZXgub2Zmc2V0KCk7CiAKICAg
ICBlbWl0TG9hZFBheWxvYWQoaW5kZXgsIHJlZ1QwKTsKICAgICBlbWl0TG9hZFBheWxvYWQoZW51
bWVyYXRvciwgcmVnVDEpOwpAQCAtMTE2NSwxMSArMTIyOCwxMiBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QyLCByZWdUMCk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZShJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaW50IGRzdCA9IGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IGVudW1lcmF0b3IgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGludCBpbmRleCA9IGN1cnJlbnRJbnN0cnVj
dGlvblszXS51Lm9wZXJhbmQ7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BFbnVtZXJhdG9yR2VuZXJpY1BuYW1lPigpOworICAgIGludCBkc3QgPSBieXRlY29k
ZS5kc3Qub2Zmc2V0KCk7CisgICAgaW50IGVudW1lcmF0b3IgPSBieXRlY29kZS5lbnVtZXJhdG9y
Lm9mZnNldCgpOworICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLmluZGV4Lm9mZnNldCgpOwogCiAg
ICAgZW1pdExvYWRQYXlsb2FkKGluZGV4LCByZWdUMCk7CiAgICAgZW1pdExvYWRQYXlsb2FkKGVu
dW1lcmF0b3IsIHJlZ1QxKTsKQEAgLTExODksMTAgKzEyNTMsMTIgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDIsIHJlZ1QwKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRfb3BfcHJvZmlsZV90eXBlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lk
IEpJVDo6ZW1pdF9vcF9wcm9maWxlX3R5cGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKLSAgICBUeXBlTG9jYXRpb24qIGNhY2hlZFR5cGVMb2NhdGlvbiA9IGN1cnJl
bnRJbnN0cnVjdGlvblsyXS51LmxvY2F0aW9uOwotICAgIGludCB2YWx1ZVRvUHJvZmlsZSA9IGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BQcm9maWxlVHlwZT4oKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9
IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBUeXBlTG9jYXRpb24qIGNhY2hl
ZFR5cGVMb2NhdGlvbiA9IG1ldGFkYXRhLnR5cGVMb2NhdGlvbjsKKyAgICBpbnQgdmFsdWVUb1By
b2ZpbGUgPSBieXRlY29kZS50YXJnZXQub2Zmc2V0KCk7CiAKICAgICAvLyBMb2FkIHBheWxvYWQg
aW4gVDAuIExvYWQgdGFnIGluIFQzLgogICAgIGVtaXRMb2FkUGF5bG9hZCh2YWx1ZVRvUHJvZmls
ZSwgcmVnVDApOwpAQCAtMTI1NCwzMyArMTMyMCwzNCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wcm9m
aWxlX3R5cGUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBqdW1wVG9FbmQu
bGluayh0aGlzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3By
b2xvZ3VlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9v
cF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9ndWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKICAgICB1cGRhdGVUb3BDYWxsRnJhbWUoKTsKICAgICBzdGF0aWNfYXNz
ZXJ0KG5vbkFyZ0dQUjAgIT0gcmVnVDAgJiYgbm9uQXJnR1BSMCAhPSByZWdUMiwgIndlIHdpbGwg
aGF2ZSBwcm9ibGVtcyBpZiB0aGlzIGlzIHRydWUuIik7CisgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BMb2dTaGFkb3dDaGlja2VuUHJvbG9ndWU+KCk7CiAgICAg
R1BSUmVnIHNoYWRvd1BhY2tldFJlZyA9IHJlZ1QwOwogICAgIEdQUlJlZyBzY3JhdGNoMVJlZyA9
IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1hcmd1bWVudCByZWdpc3Rlci4KICAg
ICBHUFJSZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsKICAgICBlbnN1cmVTaGFkb3dDaGlja2VuUGFj
a2V0KCp2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gxUmVnLCBzY3JhdGNoMlJlZyk7CiAK
ICAgICBzY3JhdGNoMVJlZyA9IHJlZ1Q0OwotICAgIGVtaXRMb2FkUGF5bG9hZChjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZWdUMyk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVj
b2RlLnNjb3BlLm9mZnNldCgpLCByZWdUMyk7CiAgICAgbG9nU2hhZG93Q2hpY2tlblByb2xvZ3Vl
UGFja2V0KHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHJlZ1QzKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl90YWlsKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgdXBkYXRlVG9wQ2Fs
bEZyYW1lKCk7CiAgICAgc3RhdGljX2Fzc2VydChub25BcmdHUFIwICE9IHJlZ1QwICYmIG5vbkFy
Z0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUgcHJvYmxlbXMgaWYgdGhpcyBpcyB0cnVlLiIp
OworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTG9nU2hhZG93
Q2hpY2tlblRhaWw+KCk7CiAgICAgR1BSUmVnIHNoYWRvd1BhY2tldFJlZyA9IHJlZ1QwOwogICAg
IEdQUlJlZyBzY3JhdGNoMVJlZyA9IG5vbkFyZ0dQUjA7IC8vIFRoaXMgbXVzdCBiZSBhIG5vbi1h
cmd1bWVudCByZWdpc3Rlci4KICAgICBHUFJSZWcgc2NyYXRjaDJSZWcgPSByZWdUMjsKICAgICBl
bnN1cmVTaGFkb3dDaGlja2VuUGFja2V0KCp2bSgpLCBzaGFkb3dQYWNrZXRSZWcsIHNjcmF0Y2gx
UmVnLCBzY3JhdGNoMlJlZyk7Ci0KLSAgICBlbWl0TG9hZFBheWxvYWQoY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZCwgcmVnVDIpOwotICAgIGVtaXRMb2FkVGFnKGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQsIHJlZ1QxKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUu
dGhpc1ZhbHVlLm9mZnNldCgpLCByZWdUMik7CisgICAgZW1pdExvYWRUYWcoYnl0ZWNvZGUudGhp
c1ZhbHVlLm9mZnNldCgpLCByZWdUMSk7CiAgICAgSlNWYWx1ZVJlZ3MgdGhpc1JlZ3MocmVnVDEs
IHJlZ1QyKTsKLSAgICBlbWl0TG9hZFBheWxvYWQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZCwgcmVnVDMpOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5zY29wZS5vZmZzZXQo
KSwgcmVnVDMpOwogICAgIGxvZ1NoYWRvd0NoaWNrZW5UYWlsUGFja2V0KHNoYWRvd1BhY2tldFJl
ZywgdGhpc1JlZ3MsIHJlZ1QzLCBtX2NvZGVCbG9jaywgQ2FsbFNpdGVJbmRleChjdXJyZW50SW5z
dHJ1Y3Rpb24pKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKaW5kZXggOTEyNmY2OTYwN2JiYjA0NTA4NWE2MTkxNmNi
ZDU2YzI5YmY0YTk0Yi4uNDBhYzRmM2ZjNjZlODViYWY5ZjI5YTNkMWEzNjNlZmE4ODFmMDkwNSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMy
XzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNz
MzJfNjQuY3BwCkBAIC00Nyw1MCArNDcsNTQgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAgICAgCi12
b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lkKEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lkKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaW50IGJhc2UgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBwcm9wZXJ0eSA9IGN1cnJlbnRJbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgaW50IG9wdGlvbnMgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
M10udS5vcGVyYW5kOwotICAgIGludCBnZXR0ZXIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5v
cGVyYW5kOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0
R2V0dGVyQnlJZD4oKTsKKyAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLmJhc2Uub2Zmc2V0KCk7Cisg
ICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUucHJvcGVydHk7CisgICAgaW50IG9wdGlvbnMgPSBi
eXRlY29kZS5hdHRyaWJ1dGVzOworICAgIGludCBnZXR0ZXIgPSBieXRlY29kZS5hY2Nlc3Nvci5v
ZmZzZXQoKTsKIAogICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMSk7CiAgICAgZW1pdExv
YWRQYXlsb2FkKGdldHRlciwgcmVnVDMpOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0
R2V0dGVyQnlJZCwgcmVnVDEsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKHByb3BlcnR5KS5pbXBs
KCksIG9wdGlvbnMsIHJlZ1QzKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3NldHRlcl9i
eV9pZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X3NldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewotICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBp
bnQgcHJvcGVydHkgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGludCBv
cHRpb25zID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICBpbnQgc2V0dGVy
ID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZDsKKyAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFNldHRlckJ5SWQ+KCk7CisgICAgaW50IGJhc2Ug
PSBieXRlY29kZS5iYXNlLm9mZnNldCgpOworICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLnBy
b3BlcnR5OworICAgIGludCBvcHRpb25zID0gYnl0ZWNvZGUuYXR0cmlidXRlczsKKyAgICBpbnQg
c2V0dGVyID0gYnl0ZWNvZGUuYWNjZXNzb3Iub2Zmc2V0KCk7CiAKICAgICBlbWl0TG9hZFBheWxv
YWQoYmFzZSwgcmVnVDEpOwogICAgIGVtaXRMb2FkUGF5bG9hZChzZXR0ZXIsIHJlZ1QzKTsKICAg
ICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5SWQsIHJlZ1QxLCBtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihwcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMyk7CiB9CiAKLXZv
aWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX3NldHRlcl9ieV9p
ZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGludCBiYXNl
ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgcHJvcGVydHkgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGludCBhdHRyaWJ1dGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgIGludCBnZXR0ZXIgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bNF0udS5vcGVyYW5kOwotICAgIGludCBzZXR0ZXIgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bNV0udS5vcGVyYW5kOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wUHV0R2V0dGVyU2V0dGVyQnlJZD4oKTsKKyAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLmJh
c2Uub2Zmc2V0KCk7CisgICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUucHJvcGVydHk7CisgICAg
aW50IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5hdHRyaWJ1dGVzOworICAgIGludCBnZXR0ZXIgPSBi
eXRlY29kZS5nZXR0ZXIub2Zmc2V0KCk7CisgICAgaW50IHNldHRlciA9IGJ5dGVjb2RlLnNldHRl
ci5vZmZzZXQoKTsKIAogICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMSk7CiAgICAgZW1p
dExvYWRQYXlsb2FkKGdldHRlciwgcmVnVDMpOwogICAgIGVtaXRMb2FkUGF5bG9hZChzZXR0ZXIs
IHJlZ1Q0KTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRlciwgcmVn
VDEsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKHByb3BlcnR5KS5pbXBsKCksIGF0dHJpYnV0ZSwg
cmVnVDMsIHJlZ1Q0KTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlclNldHRl
ciwgcmVnVDEsIG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKHByb3BlcnR5KS5pbXBsKCksIGF0dHJp
YnV0ZXMsIHJlZ1QzLCByZWdUNCk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJf
YnlfdmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9v
cF9wdXRfZ2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewotICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAg
ICBpbnQgcHJvcGVydHkgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGlu
dDMyX3QgYXR0cmlidXRlcyA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAg
aW50IGdldHRlciA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7CisgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0ZXJCeVZhbD4oKTsKKyAg
ICBpbnQgYmFzZSA9IGJ5dGVjb2RlLmJhc2Uub2Zmc2V0KCk7CisgICAgaW50IHByb3BlcnR5ID0g
Ynl0ZWNvZGUucHJvcGVydHkub2Zmc2V0KCk7CisgICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gYnl0
ZWNvZGUuYXR0cmlidXRlczsKKyAgICBpbnQgZ2V0dGVyID0gYnl0ZWNvZGUuYWNjZXNzb3Iub2Zm
c2V0KCk7CiAKICAgICBlbWl0TG9hZFBheWxvYWQoYmFzZSwgcmVnVDIpOwogICAgIGVtaXRMb2Fk
KHByb3BlcnR5LCByZWdUMSwgcmVnVDApOwpAQCAtOTgsNDMgKzEwMiw0OCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyQnlWYWwsIHJlZ1QyLCBKU1Zh
bHVlUmVncyhyZWdUMSwgcmVnVDApLCBhdHRyaWJ1dGVzLCByZWdUMyk7CiB9CiAKLXZvaWQgSklU
OjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCit2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgcHJvcGVydHkgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kOwotICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGN1cnJlbnRJbnN0cnVjdGlv
blszXS51Lm9wZXJhbmQ7Ci0gICAgaW50IGdldHRlciA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51
Lm9wZXJhbmQ7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQ
dXRTZXR0ZXJCeVZhbD4oKTsKKyAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLmJhc2Uub2Zmc2V0KCk7
CisgICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUucHJvcGVydHkub2Zmc2V0KCk7CisgICAgaW50
MzJfdCBhdHRyaWJ1dGVzID0gYnl0ZWNvZGUuYXR0cmlidXRlczsKKyAgICBpbnQgc2V0dGVyID0g
Ynl0ZWNvZGUuYWNjZXNzb3Iub2Zmc2V0KCk7CiAKICAgICBlbWl0TG9hZFBheWxvYWQoYmFzZSwg
cmVnVDIpOwogICAgIGVtaXRMb2FkKHByb3BlcnR5LCByZWdUMSwgcmVnVDApOwotICAgIGVtaXRM
b2FkUGF5bG9hZChnZXR0ZXIsIHJlZ1QzKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoc2V0dGVyLCBy
ZWdUMyk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRTZXR0ZXJCeVZhbCwgcmVnVDIs
IEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIGF0dHJpYnV0ZXMsIHJlZ1QzKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
Cit2b2lkIEpJVDo6ZW1pdF9vcF9kZWxfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKLSAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZDsKLSAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0g
ICAgaW50IHByb3BlcnR5ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlbEJ5SWQ+KCk7CisgICAg
aW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKKyAgICBpbnQgYmFzZSA9IGJ5dGVjb2Rl
LmJhc2Uub2Zmc2V0KCk7CisgICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUucHJvcGVydHk7CiAg
ICAgZW1pdExvYWQoYmFzZSwgcmVnVDEsIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJh
dGlvbkRlbGV0ZUJ5SWRKU1Jlc3VsdCwgZHN0LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBt
X2NvZGVCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0eSkuaW1wbCgpKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRfb3BfZGVsX2J5X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9p
ZCBKSVQ6OmVtaXRfb3BfZGVsX2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
OwotICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICBp
bnQgcHJvcGVydHkgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlWYWw+KCk7CisgICAgaW50
IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKKyAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLmJh
c2Uub2Zmc2V0KCk7CisgICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUucHJvcGVydHkub2Zmc2V0
KCk7CiAgICAgZW1pdExvYWQyKGJhc2UsIHJlZ1QxLCByZWdUMCwgcHJvcGVydHksIHJlZ1QzLCBy
ZWdUMik7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeVZhbEpTUmVzdWx0LCBk
c3QsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMikp
OwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kOwotICAgIGludCBwcm9wZXJ0eSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9w
ZXJhbmQ7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gYXJyYXlQcm9maWxlRm9yPE9wR2V0
QnlWYWxTaGFwZT4oY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOworICAgIGF1dG8mIG1ldGFkYXRhID0g
Ynl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGludCBkc3QgPSBieXRlY29kZS5k
c3Qub2Zmc2V0KCk7CisgICAgaW50IGJhc2UgPSBieXRlY29kZS5iYXNlLm9mZnNldCgpOworICAg
IGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLnByb3BlcnR5Lm9mZnNldCgpOworICAgIEFycmF5UHJv
ZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5hcnJheVByb2ZpbGU7CiAgICAgQnlWYWxJbmZvKiBi
eVZhbEluZm8gPSBtX2NvZGVCbG9jay0+YWRkQnlWYWxJbmZvKCk7CiAKICAgICBlbWl0TG9hZDIo
YmFzZSwgcmVnVDEsIHJlZ1QwLCBwcm9wZXJ0eSwgcmVnVDMsIHJlZ1QyKTsKQEAgLTE3Nyw3ICsx
ODYsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiAgICAgICAgIHJlc3VsdE9LLmxpbmsodGhpcyk7CiAgICAgfQogCi0gICAg
ZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwg
cmVnVDApOwogCiAgICAgTGFiZWwgbmV4dEhvdFBhdGggPSBsYWJlbCgpOwpAQCAtMTg1LDE3ICsx
OTQsMTggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29t
cGlsYXRpb25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZU9mZnNldCwgbm90SW5kZXgsIGJhZFR5
cGUsIG1vZGUsIHByb2ZpbGUsIGRvbmUsIG5leHRIb3RQYXRoKSk7CiB9CiAKLUpJVEdldEJ5SWRH
ZW5lcmF0b3IgSklUOjplbWl0R2V0QnlWYWxXaXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiBieVZhbElu
Zm8sIEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIGNvbnN0IElkZW50aWZpZXImIHBy
b3BlcnR5TmFtZSwgSnVtcCYgZmFzdERvbmVDYXNlLCBKdW1wJiBzbG93RG9uZUNhc2UsIEp1bXBM
aXN0JiBzbG93Q2FzZXMpCitKSVRHZXRCeUlkR2VuZXJhdG9yIEpJVDo6ZW1pdEdldEJ5VmFsV2l0
aENhY2hlZElkKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBPcEdldEJ5VmFsIGJ5dGVjb2RlLCBjb25z
dCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEp1bXAmIGZhc3REb25lQ2FzZSwgSnVtcCYgc2xv
d0RvbmVDYXNlLCBKdW1wTGlzdCYgc2xvd0Nhc2VzKQogewotICAgIGludCBkc3QgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotCiAgICAgLy8gYmFzZTogdGFnKHJlZ1QxKSwgcGF5
bG9hZChyZWdUMCkKICAgICAvLyBwcm9wZXJ0eTogdGFnKHJlZ1QzKSwgcGF5bG9hZChyZWdUMikK
ICAgICAvLyBzY3JhdGNoOiByZWdUNAogCisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZz
ZXQoKTsKKwogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJlZ1QzKSk7CiAg
ICAgZW1pdEJ5VmFsSWRlbnRpZmllckNoZWNrKGJ5VmFsSW5mbywgcmVnVDIsIHJlZ1Q0LCBwcm9w
ZXJ0eU5hbWUsIHNsb3dDYXNlcyk7CiAKKyAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5VmFsSW5mby0+Ynl0
ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciBnZW4oCiAgICAgICAg
IG1fY29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpLCBDYWxsU2l0ZUluZGV4
KGN1cnJlbnRJbnN0cnVjdGlvbiksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3Rl
cnMoKSwKICAgICAgICAgcHJvcGVydHlOYW1lLmltcGwoKSwgSlNWYWx1ZVJlZ3M6OnBheWxvYWRP
bmx5KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgQWNjZXNzVHlwZTo6R2V0KTsK
QEAgLTIwNiwxOCArMjE2LDE5IEBAIEpJVEdldEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0R2V0QnlW
YWxXaXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiBieVZhbEluZm8sIEluc3RydWN0CiAgICAgTGFiZWwg
Y29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAgICAgZ2VuLnNsb3dQYXRoSnVtcCgpLmxpbmsodGhp
cyk7CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUob3BlcmF0aW9u
R2V0QnlJZE9wdGltaXplLCBkc3QsIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMSwg
cmVnVDApLCBwcm9wZXJ0eU5hbWUuaW1wbCgpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25H
ZXRCeUlkT3B0aW1pemUsIGRzdCwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QxLCBy
ZWdUMCksIHByb3BlcnR5TmFtZS5pbXBsKCkpOwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwo
Y29sZFBhdGhCZWdpbiwgY2FsbCk7CiAgICAgc2xvd0RvbmVDYXNlID0ganVtcCgpOwogCiAgICAg
cmV0dXJuIGdlbjsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCiB7Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7
Ci0gICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGlu
dCBwcm9wZXJ0eSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeVZhbD4oKTsKKyAgICBpbnQg
ZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOworICAgIGludCBiYXNlID0gYnl0ZWNvZGUuYmFz
ZS5vZmZzZXQoKTsKKyAgICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5wcm9wZXJ0eS5vZmZzZXQo
KTsKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9i
eVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5VmFsSW5mbzsKIAogICAgIGxpbmtTbG93Q2FzZUlmTm90
SlNDZWxsKGl0ZXIsIGJhc2UpOyAvLyBiYXNlIGNlbGwgY2hlY2sKQEAgLTIyOSw3ICsyNDAsNyBA
QCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0NhcwogICAgIGVtaXROYWtlZENhbGwoQ29kZUxvY2F0aW9u
TGFiZWw8Tm9QdHJUYWc+KG1fdm0tPmdldENUSVN0dWIoc3RyaW5nR2V0QnlWYWxHZW5lcmF0b3Ip
LnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSkpOwogICAgIEp1bXAgZmFpbGVkID0gYnJhbmNoVGVz
dFB0cihaZXJvLCByZWdUMCk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJlZ1QwKTsKLSAgICBl
bWl0SnVtcFNsb3dUb0hvdChqdW1wKCksIE9QQ09ERV9MRU5HVEgob3BfZ2V0X2J5X3ZhbCkpOwor
ICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgY3VycmVudEluc3RydWN0aW9uLT5zaXplKCkp
OwogICAgIGZhaWxlZC5saW5rKHRoaXMpOwogICAgIG5vdFN0cmluZy5saW5rKHRoaXMpOwogICAg
IG5vbkNlbGwubGluayh0aGlzKTsKQEAgLTI0NywxNCArMjU4LDIyIEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9nZXRfYnlfdmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzCiAgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5zdHJ1Y3Rpb25J
bmRleF0ucmV0dXJuQWRkcmVzcyA9IGNhbGw7CiAgICAgbV9ieVZhbEluc3RydWN0aW9uSW5kZXgr
KzsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKKyAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7Cit9CisKK3ZvaWQgSklUOjpl
bWl0X29wX3B1dF9ieV92YWxfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCit7CisgICAgZW1pdF9vcF9wdXRfYnlfdmFsPE9wUHV0QnlWYWxEaXJlY3Q+KGN1cnJl
bnRJbnN0cnVjdGlvbik7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3RlbXBsYXRlPHR5cGVuYW1lIE9wPgordm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewotICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsK
LSAgICBpbnQgcHJvcGVydHkgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAg
IEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IGFycmF5UHJvZmlsZUZvcjxPcFB1dEJ5VmFsU2hhcGU+
KGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3A+KCk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7CisgICAgaW50IGJhc2UgPSBieXRlY29kZS5iYXNlLm9mZnNldCgpOworICAg
IGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLnByb3BlcnR5Lm9mZnNldCgpOworICAgIEFycmF5UHJv
ZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5hcnJheVByb2ZpbGU7CiAgICAgQnlWYWxJbmZvKiBi
eVZhbEluZm8gPSBtX2NvZGVCbG9jay0+YWRkQnlWYWxJbmZvKCk7CiAgICAgCiAgICAgZW1pdExv
YWQyKGJhc2UsIHJlZ1QxLCByZWdUMCwgcHJvcGVydHksIHJlZ1QzLCByZWdUMik7CkBAIC0yNzQs
MTYgKzI5MywxNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgSklUQXJyYXlNb2RlIG1vZGUgPSBjaG9vc2VBcnJheU1v
ZGUocHJvZmlsZSk7CiAgICAgc3dpdGNoIChtb2RlKSB7CiAgICAgY2FzZSBKSVRJbnQzMjoKLSAg
ICAgICAgc2xvd0Nhc2VzID0gZW1pdEludDMyUHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBi
YWRUeXBlKTsKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEludDMyUHV0QnlWYWwoYnl0ZWNvZGUs
IGJhZFR5cGUpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEpJVERvdWJsZToKLSAgICAgICAg
c2xvd0Nhc2VzID0gZW1pdERvdWJsZVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlw
ZSk7CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXREb3VibGVQdXRCeVZhbChieXRlY29kZSwgYmFk
VHlwZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSklUQ29udGlndW91czoKLSAgICAgICAg
c2xvd0Nhc2VzID0gZW1pdENvbnRpZ3VvdXNQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJh
ZFR5cGUpOworICAgICAgICBzbG93Q2FzZXMgPSBlbWl0Q29udGlndW91c1B1dEJ5VmFsKGJ5dGVj
b2RlLCBiYWRUeXBlKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBKSVRBcnJheVN0b3JhZ2U6
Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBzbG93Q2FzZXMgPSBlbWl0QXJyYXlTdG9yYWdl
UHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUpOwogICAgICAgICBicmVhazsKICAgICBkZWZhdWx0
OgogICAgICAgICBDUkFTSCgpOwpAQCAtMjk4LDExICszMTcsMTMgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIG1fYnlW
YWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25JbmZvKGJ5VmFsSW5mbywg
bV9ieXRlY29kZU9mZnNldCwgbm90SW5kZXgsIGJhZFR5cGUsIG1vZGUsIHByb2ZpbGUsIGRvbmUs
IGRvbmUpKTsKIH0KIAotSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRHZW5lcmljQ29udGlndW91c1B1
dEJ5VmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFBhdGNoYWJsZUp1bXAmIGJh
ZFR5cGUsIEluZGV4aW5nVHlwZSBpbmRleGluZ1NoYXBlKQordGVtcGxhdGUgPHR5cGVuYW1lIE9w
PgorSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRHZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKE9wIGJ5
dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBJbmRleGluZ1R5cGUgaW5kZXhpbmdTaGFw
ZSkKIHsKLSAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0g
ICAgaW50IHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICBBcnJh
eVByb2ZpbGUqIHByb2ZpbGUgPSBhcnJheVByb2ZpbGVGb3I8T3BQdXRCeVZhbFNoYXBlPihjdXJy
ZW50SW5zdHJ1Y3Rpb24pOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOworICAgIGludCBiYXNlID0gYnl0ZWNvZGUuYmFzZS5vZmZzZXQoKTsKKyAg
ICBpbnQgdmFsdWUgPSBieXRlY29kZS52YWx1ZS5vZmZzZXQoKTsKKyAgICBBcnJheVByb2ZpbGUq
IHByb2ZpbGUgPSAmbWV0YWRhdGEuYXJyYXlQcm9maWxlOwogCiAgICAgSnVtcExpc3Qgc2xvd0Nh
c2VzOwogICAgIApAQCAtMzU3LDExICszNzgsMTMgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRH
ZW5lcmljQ29udGlndW91c1B1dEJ5VmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24K
ICAgICByZXR1cm4gc2xvd0Nhc2VzOwogfQogCi1KSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEFycmF5
U3RvcmFnZVB1dEJ5VmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFBhdGNoYWJs
ZUp1bXAmIGJhZFR5cGUpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+CitKSVQ6Okp1bXBMaXN0IEpJ
VDo6ZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKE9wIGJ5dGVjb2RlLCBQYXRjaGFibGVKdW1wJiBi
YWRUeXBlKQogewotICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZDsKLSAgICBpbnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAg
IEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IGFycmF5UHJvZmlsZUZvcjxPcFB1dEJ5VmFsU2hhcGU+
KGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7CisgICAgaW50IGJhc2UgPSBieXRlY29kZS5iYXNlLm9mZnNldCgp
OworICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLnZhbHVlLm9mZnNldCgpOworICAgIEFycmF5UHJv
ZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5hcnJheVByb2ZpbGU7CiAKICAgICBKdW1wTGlzdCBz
bG93Q2FzZXM7CiAgICAgCkBAIC0zOTQsMTMgKzQxNywxNCBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6
ZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFBhdAogICAgIHJldHVybiBzbG93Q2FzZXM7CiB9CiAKLUpJVFB1dEJ5SWRHZW5lcmF0b3IgSklU
OjplbWl0UHV0QnlWYWxXaXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiBieVZhbEluZm8sIEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFB1dEtpbmQgcHV0S2luZCwgY29uc3QgSWRlbnRpZmll
ciYgcHJvcGVydHlOYW1lLCBKdW1wTGlzdCYgZG9uZUNhc2VzLCBKdW1wTGlzdCYgc2xvd0Nhc2Vz
KQordGVtcGxhdGUgPHR5cGVuYW1lIE9wPgorSklUUHV0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRQ
dXRCeVZhbFdpdGhDYWNoZWRJZChCeVZhbEluZm8qIGJ5VmFsSW5mbywgT3AgYnl0ZWNvZGUsIFB1
dEtpbmQgcHV0S2luZCwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVydHlOYW1lLCBKdW1wTGlzdCYg
ZG9uZUNhc2VzLCBKdW1wTGlzdCYgc2xvd0Nhc2VzKQogewogICAgIC8vIGJhc2U6IHRhZyhyZWdU
MSksIHBheWxvYWQocmVnVDApCiAgICAgLy8gcHJvcGVydHk6IHRhZyhyZWdUMyksIHBheWxvYWQo
cmVnVDIpCiAKLSAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7
Ci0gICAgaW50IHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBp
bnQgYmFzZSA9IGJ5dGVjb2RlLmJhc2Uub2Zmc2V0KCk7CisgICAgaW50IHZhbHVlID0gYnl0ZWNv
ZGUudmFsdWUub2Zmc2V0KCk7CiAKICAgICBzbG93Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90Q2Vs
bChyZWdUMykpOwogICAgIGVtaXRCeVZhbElkZW50aWZpZXJDaGVjayhieVZhbEluZm8sIHJlZ1Qy
LCByZWdUMiwgcHJvcGVydHlOYW1lLCBzbG93Q2FzZXMpOwpAQCAtNDExLDYgKzQzNSw3IEBAIEpJ
VFB1dEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0UHV0QnlWYWxXaXRoQ2FjaGVkSWQoQnlWYWxJbmZv
KiBieVZhbEluZm8sIEluc3RydWN0CiAgICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QwKTsK
ICAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDMsIHJlZ1QyKTsKIAorICAgIGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQo
YnlWYWxJbmZvLT5ieXRlY29kZUluZGV4KS5wdHIoKTsKICAgICBKSVRQdXRCeUlkR2VuZXJhdG9y
IGdlbigKICAgICAgICAgbV9jb2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCks
IENhbGxTaXRlSW5kZXgoY3VycmVudEluc3RydWN0aW9uKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2
YWlsYWJsZVJlZ2lzdGVycygpLAogICAgICAgICBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHkocmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpLCByZWdUMSwgbV9jb2RlQmxvY2stPmVjbWFN
b2RlKCksIHB1dEtpbmQpOwpAQCAtNDMwLDE4ICs0NTUsMjkgQEAgSklUUHV0QnlJZEdlbmVyYXRv
ciBKSVQ6OmVtaXRQdXRCeVZhbFdpdGhDYWNoZWRJZChCeVZhbEluZm8qIGJ5VmFsSW5mbywgSW5z
dHJ1Y3QKICAgICByZXR1cm4gZ2VuOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5
X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQ7Ci0gICAgaW50IHByb3BlcnR5ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUu
b3BlcmFuZDsKLSAgICBpbnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5k
OworICAgIGJvb2wgaXNEaXJlY3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPm9wY29kZUlEKCkgPT0g
b3BfcHV0X2J5X3ZhbF9kaXJlY3Q7CisgICAgaW50IGJhc2U7CisgICAgaW50IHByb3BlcnR5Owor
ICAgIGludCB2YWx1ZTsKKworICAgIGF1dG8gbG9hZCA9IFsmXShhdXRvIGJ5dGVjb2RlKSB7Cisg
ICAgICAgIGJhc2UgPSBieXRlY29kZS5iYXNlLm9mZnNldCgpOworICAgICAgICBwcm9wZXJ0eSA9
IGJ5dGVjb2RlLnByb3BlcnR5Lm9mZnNldCgpOworICAgICAgICB2YWx1ZSA9IGJ5dGVjb2RlLnZh
bHVlLm9mZnNldCgpOworICAgIH07CisKKyAgICBpZiAoaXNEaXJlY3QpCisgICAgICAgIGxvYWQo
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsRGlyZWN0PigpKTsKKyAgICBlbHNlCisg
ICAgICAgIGxvYWQoY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5VmFsPigpKTsKKwogICAg
IEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFsSW5z
dHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwogICAgIAogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7CiAgICAgTGFiZWwgc2xvd1BhdGggPSBsYWJlbCgpOwogICAgIAotICAgIGJvb2wgaXNEaXJl
Y3QgPSBJbnRlcnByZXRlcjo6Z2V0T3Bjb2RlSUQoY3VycmVudEluc3RydWN0aW9uLT51Lm9wY29k
ZSkgPT0gb3BfcHV0X2J5X3ZhbF9kaXJlY3Q7Ci0KICAgICAvLyBUaGUgcmVnaXN0ZXIgc2VsZWN0
aW9uIGJlbG93IGlzIGNob3NlbiB0byByZWR1Y2UgcmVnaXN0ZXIgc3dhcHBpbmcgb24gQVJNLgog
ICAgIC8vIFN3YXBwaW5nIHNob3VsZG4ndCBoYXBwZW4gb24gb3RoZXIgcGxhdGZvcm1zLgogICAg
IGVtaXRMb2FkKGJhc2UsIHJlZ1QyLCByZWdUMSk7CkBAIC00NTQsMTEgKzQ5MCwxMiBAQCB2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0NhcwogICAgIG1fYnlWYWxJbnN0cnVjdGlvbkluZGV4Kys7CiB9CiAK
LXZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQ7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKTsKKyAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7CisgICAgaW50
IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKKyAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLmJh
c2Uub2Zmc2V0KCk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGJ5dGVjb2RlLnByb3BlcnR5KSk7CiAKICAgICBlbWl0TG9hZChiYXNlLCBy
ZWdUMSwgcmVnVDApOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdU
MSk7CkBAIC00NzAsMTYgKzUwNywxNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lk
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNs
b3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogICAgIAotICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJl
Z1QwKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCiB7CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAotICAgIGludCByZXN1bHRW
UmVnID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoY3VycmVudEluc3RydWN0aW9u
WzNdLnUub3BlcmFuZCkpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wVHJ5R2V0QnlJZD4oKTsKKyAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLmRzdC5v
ZmZzZXQoKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUucHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3Im
IGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAKQEAgLTQ5MSwxMSArNTI5LDEy
IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93CiB9CiAKIAotdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0
X2J5X2lkX2RpcmVjdChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
OwotICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICBj
b25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoY3VycmVu
dEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZERpcmVjdD4oKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNv
ZGUuZHN0Lm9mZnNldCgpOworICAgIGludCBiYXNlID0gYnl0ZWNvZGUuYmFzZS5vZmZzZXQoKTsK
KyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUucHJvcGVydHkpKTsKIAogICAgIGVtaXRMb2FkKGJhc2UsIHJlZ1QxLCByZWdUMCk7
CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKQEAgLTUwNywz
MiArNTQ2LDM0IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1w
KCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxp
bmdTaXRlKCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jaykpOwogICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQog
ewogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9w
ZXJhbmQpKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dEJ5SWREaXJlY3Q+KCk7CisgICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5kc3Qub2Zmc2V0
KCk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLnByb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4g
PSBtX2dldEJ5SWRzW21fZ2V0QnlJZEluZGV4KytdOwogCiAgICAgTGFiZWwgY29sZFBhdGhCZWdp
biA9IGxhYmVsKCk7CiAKLSAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUo
b3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplLCByZXN1bHRWUmVnLCBnZW4uc3R1YkluZm8o
KSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgaWRlbnQtPmltcGwoKSk7CisgICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSwgb3BlcmF0aW9uR2V0QnlJZERpcmVjdE9wdGltaXplLCByZXN1bHRWUmVnLCBnZW4uc3R1
YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgaWRlbnQtPmltcGwoKSk7CiAKICAg
ICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCiAKLXZv
aWQgSklUOjplbWl0X29wX2dldF9ieV9pZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQordm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQ7Ci0gICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwot
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihj
dXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOworICAgIGludCBkc3QgPSBieXRlY29k
ZS5kc3Qub2Zmc2V0KCk7CisgICAgaW50IGJhc2UgPSBieXRlY29kZS5iYXNlLm9mZnNldCgpOwor
ICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihi
eXRlY29kZS5wcm9wZXJ0eSkpOwogICAgIAogICAgIGVtaXRMb2FkKGJhc2UsIHJlZ1QxLCByZWdU
MCk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKQEAgLTU0
NywzMiArNTg4LDM0IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZChJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7
CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CiAKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQ7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKTsKKyAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7CisgICAgaW50
IHJlc3VsdFZSZWcgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7CisgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLnByb3BlcnR5KSk7
CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21fZ2V0QnlJZElu
ZGV4KytdOwogICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogICAgIAot
ICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShvcGVyYXRpb25HZXRCeUlk
T3B0aW1pemUsIHJlc3VsdFZSZWcsIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMSwg
cmVnVDApLCBpZGVudC0+aW1wbCgpKTsKKyAgICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0
aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlk
T3B0aW1pemUsIHJlc3VsdFZSZWcsIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMSwg
cmVnVDApLCBpZGVudC0+aW1wbCgpKTsKICAgICAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGNvbGRQYXRoQmVnaW4sIGNhbGwpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRf
d2l0aF90aGlzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7
Ci0gICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGlu
dCB0aGlzVlJlZyA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGN1cnJlbnRJbnN0
cnVjdGlvbls0XS51Lm9wZXJhbmQpKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUu
ZHN0Lm9mZnNldCgpOworICAgIGludCBiYXNlID0gYnl0ZWNvZGUuYmFzZS5vZmZzZXQoKTsKKyAg
ICBpbnQgdGhpc1ZSZWcgPSBieXRlY29kZS50aGlzVmFsdWUub2Zmc2V0KCk7CisgICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLnBy
b3BlcnR5KSk7CiAgICAgCiAgICAgZW1pdExvYWQoYmFzZSwgcmVnVDEsIHJlZ1QwKTsKICAgICBl
bWl0TG9hZCh0aGlzVlJlZywgcmVnVDQsIHJlZ1QzKTsKQEAgLTU4NiwzNSArNjI5LDM4IEBAIHZv
aWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1f
Z2V0QnlJZHNXaXRoVGhpcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWRfd2l0aF90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
CiB7CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAotICAgIGludCByZXN1bHRWUmVnID0g
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoY3VycmVudEluc3RydWN0aW9uWzRdLnUu
b3BlcmFuZCkpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
R2V0QnlJZFdpdGhUaGlzPigpOworICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUuZHN0Lm9m
ZnNldCgpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihieXRlY29kZS5wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZFdpdGhUaGlzR2Vu
ZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzV2l0aFRoaXNbbV9nZXRCeUlkV2l0aFRoaXNJbmRleCsr
XTsKICAgICAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKICAgICAKLSAgICBD
YWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUob3BlcmF0aW9uR2V0QnlJZFdpdGhU
aGlzT3B0aW1pemUsIHJlc3VsdFZSZWcsIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUNCwgcmVnVDMpLCBpZGVudC0+aW1wbCgpKTsKKyAg
ICBDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNPcHRpbWl6ZSwgcmVzdWx0VlJl
ZywgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVSZWdz
KHJlZ1Q0LCByZWdUMyksIGlkZW50LT5pbXBsKCkpOwogICAgIAogICAgIGdlbi5yZXBvcnRTbG93
UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX3B1
dF9ieV9pZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgLy8gSW4gb3JkZXIgdG8gYmUgYWJsZSB0byBwYXRjaCBib3RoIHRoZSBTdHJ1Y3R1cmUsIGFu
ZCB0aGUgb2JqZWN0IG9mZnNldCwgd2Ugc3RvcmUgb25lIHBvaW50ZXIsCiAgICAgLy8gdG8ganVz
dCBhZnRlciB0aGUgYXJndW1lbnRzIGhhdmUgYmVlbiBsb2FkZWQgaW50byByZWdpc3RlcnMgJ2hv
dFBhdGhCZWdpbicsIGFuZCB3ZSBnZW5lcmF0ZSBjb2RlCiAgICAgLy8gc3VjaCB0aGF0IHRoZSBT
dHJ1Y3R1cmUgJiBvZmZzZXQgYXJlIGFsd2F5cyBhdCB0aGUgc2FtZSBkaXN0YW5jZSBmcm9tIHRo
aXMuCiAgICAgCi0gICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
OwotICAgIGludCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAg
aW50IGRpcmVjdCA9IGN1cnJlbnRJbnN0cnVjdGlvbls4XS51LnB1dEJ5SWRGbGFncyAmIFB1dEJ5
SWRJc0RpcmVjdDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFB1dEJ5SWQ+KCk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7CisgICAgaW50IGJhc2UgPSBieXRlY29kZS5iYXNlLm9mZnNldCgpOworICAgIGlu
dCB2YWx1ZSA9IGJ5dGVjb2RlLnZhbHVlLm9mZnNldCgpOworICAgIGludCBkaXJlY3QgPSBtZXRh
ZGF0YS5mbGFncyAmIFB1dEJ5SWRJc0RpcmVjdDsKICAgICAKICAgICBlbWl0TG9hZDIoYmFzZSwg
cmVnVDEsIHJlZ1QwLCB2YWx1ZSwgcmVnVDMsIHJlZ1QyKTsKICAgICAKQEAgLTYzMywxMiArNjc5
LDEzIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogICAgIG1fcHV0QnlJZHMuYXBwZW5kKGdlbik7CiB9CiAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9wdXRfYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9wdXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwogCi0gICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
OwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmll
cihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7CisgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOworICAgIGludCBiYXNlID0gYnl0
ZWNvZGUuYmFzZS5vZmZzZXQoKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9j
b2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUucHJvcGVydHkpKTsKIAogICAgIExhYmVsIGNv
bGRQYXRoQmVnaW4odGhpcyk7CiAKQEAgLTY1MywxMSArNzAwLDEyIEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9wdXRfYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxs
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5v
cGVyYW5kOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7CisgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7CisgICAgaW50IGRzdCA9
IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKKyAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLmJhc2Uub2Zm
c2V0KCk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGJ5dGVjb2RlLnByb3BlcnR5KSk7CiAKICAgICBlbWl0TG9hZChiYXNlLCByZWdUMSwg
cmVnVDApOwogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7CkBA
IC02NzIsMTIgKzcyMCwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV9pZChJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9pbl9ieV9pZChJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAotICAgIGludCByZXN1bHRWUmVnID0gY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYo
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkp
OworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigp
OworICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOworICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5w
cm9wZXJ0eSkpOwogCiAgICAgSklUSW5CeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2luQnlJZHNbbV9p
bkJ5SWRJbmRleCsrXTsKIApAQCAtNzA1LDEyICs3NTQsMTUgQEAgdm9pZCBKSVQ6OmVtaXRSZXNv
bHZlQ2xvc3VyZShpbnQgZHN0LCBpbnQgc2NvcGUsIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVj
a3MsIHUKICAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwogfQogCi12b2lkIEpJVDo6
ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2
b2lkIEpJVDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQ7Ci0gICAgaW50IHNjb3BlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsK
LSAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IHN0YXRpY19jYXN0PFJlc29sdmVUeXBlPihj
dXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kKTsKLSAgICB1bnNpZ25lZCBkZXB0aCA9IGN1
cnJlbnRJbnN0cnVjdGlvbls1XS51Lm9wZXJhbmQ7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BSZXNvbHZlU2NvcGU+KCk7CisgICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2Rl
LmRzdC5vZmZzZXQoKTsKKyAgICBpbnQgc2NvcGUgPSBieXRlY29kZS5zY29wZS5vZmZzZXQoKTsK
KyAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLnJlc29sdmVUeXBlOworICAg
IHVuc2lnbmVkIGRlcHRoID0gbWV0YWRhdGEubG9jYWxTY29wZURlcHRoOworCiAgICAgYXV0byBl
bWl0Q29kZSA9IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUpIHsKICAgICAgICAgc3dpdGNo
IChyZXNvbHZlVHlwZSkgewogICAgICAgICBjYXNlIEdsb2JhbFByb3BlcnR5OgpAQCAtNzMzLDcg
Kzc4NSw3IEBAIHZvaWQgSklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE1vZHVs
ZVZhcjoKICAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBy
ZWdUMSk7Ci0gICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIoY3VycmVudEluc3RydWN0aW9u
WzZdLnUuanNDZWxsLmdldCgpKSwgcmVnVDApOworICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1t
UHRyKG1ldGFkYXRhLmxleGljYWxFbnZpcm9ubWVudC5nZXQoKSksIHJlZ1QwKTsKICAgICAgICAg
ICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgY2FzZSBEeW5hbWljOgpAQCAtODA5LDEzICs4NjEsMTUgQEAgdm9pZCBKSVQ6OmVtaXRH
ZXRDbG9zdXJlVmFyKGludCBzY29wZSwgdWludHB0cl90IG9wZXJhbmQpCiAgICAgbG9hZDMyKEFk
ZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygpICsg
b3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikgKyBQYXlsb2FkT2Zmc2V0KSwgcmVnVDApOwogfQog
Ci12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBpbnQgZHN0ID0gY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgc2NvcGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gR2V0UHV0SW5mbyhj
dXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kKS5yZXNvbHZlVHlwZSgpOwotICAgIFN0cnVj
dHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNV0udS5zdHJ1Y3R1cmUu
c2xvdCgpOwotICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVp
bnRwdHJfdCo+KCZjdXJyZW50SW5zdHJ1Y3Rpb25bNl0udS5wb2ludGVyKTsKKyAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKKyAgICBh
dXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBpbnQg
ZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOworICAgIGludCBzY29wZSA9IGJ5dGVjb2RlLnNj
b3BlLm9mZnNldCgpOworICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEuZ2V0
UHV0SW5mby5yZXNvbHZlVHlwZSgpOworICAgIFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBt
ZXRhZGF0YS5zdHJ1Y3R1cmUuc2xvdCgpOworICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSBy
ZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5vcGVyYW5kKTsKICAgICAKICAg
ICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSwgYm9vbCBpbmRp
cmVjdExvYWRGb3JPcGVyYW5kKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKQEAg
LTkwMiwxNiArOTU2LDE3IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgICAgIGVtaXRDb2RlKHJlc29sdmVUeXBl
LCBmYWxzZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jaykpOwogICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7CiB9CiAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9nZXRfZnJvbV9zY29wZShJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kOwotICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShvcGVyYXRpb25H
ZXRGcm9tU2NvcGUsIGRzdCwgY3VycmVudEluc3RydWN0aW9uKTsKKyAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21TY29wZT4oKTsKKyAgICBpbnQgZHN0
ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOworICAgIGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEZyb21TY29wZSwgZHN0
LCBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQogCiB2b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcmlh
YmxlKEpTVmFsdWUqIG9wZXJhbmQsIGludCB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQpAQCAt
OTQyLDE0ICs5OTcsMTYgQEAgdm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKGludCBzY29wZSwg
dWludHB0cl90IG9wZXJhbmQsIGludCB2YWx1ZSwgV2F0Y2hwb2ludFMKICAgICBzdG9yZTMyKHJl
Z1QyLCBBZGRyZXNzKHJlZ1QwLCBKU0xleGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJs
ZXMoKSArIG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpICsgUGF5bG9hZE9mZnNldCkpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGludCBzY29wZSA9IGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzNd
LnUub3BlcmFuZDsKLSAgICBHZXRQdXRJbmZvIGdldFB1dEluZm8gPSBHZXRQdXRJbmZvKGN1cnJl
bnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBpbnQgc2NvcGUgPSBieXRlY29kZS5z
Y29wZS5vZmZzZXQoKTsKKyAgICBpbnQgdmFsdWUgPSBieXRlY29kZS52YWx1ZS5vZmZzZXQoKTsK
KyAgICBHZXRQdXRJbmZvIGdldFB1dEluZm8gPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKTsK
ICAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IGdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsK
LSAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gY3VycmVudEluc3RydWN0aW9uWzVdLnUu
c3RydWN0dXJlLnNsb3QoKTsKLSAgICB1aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnBy
ZXRfY2FzdDx1aW50cHRyX3QqPigmY3VycmVudEluc3RydWN0aW9uWzZdLnUucG9pbnRlcik7Cisg
ICAgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCA9IG1ldGFkYXRhLnN0cnVjdHVyZS5zbG90KCk7
CisgICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90
Kj4oJm1ldGFkYXRhLm9wZXJhbmQpOwogICAgIAogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJl
c29sdmVUeXBlIHJlc29sdmVUeXBlLCBib29sIGluZGlyZWN0TG9hZEZvck9wZXJhbmQpIHsKICAg
ICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewpAQCAtOTgzLDkgKzEwNDAsOSBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
ICAgICAgICAgICAgICAgICBhZGRTbG93Q2FzZShicmFuY2hJZkVtcHR5KHJlZ1QxKSk7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBpZiAoaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkKLSAgICAg
ICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGVJbmRpcmVjdChiaXR3aXNlX2Nhc3Q8SlNW
YWx1ZSoqPihvcGVyYW5kU2xvdCksIHZhbHVlLCBiaXR3aXNlX2Nhc3Q8V2F0Y2hwb2ludFNldCoq
PigmY3VycmVudEluc3RydWN0aW9uWzVdKSk7CisgICAgICAgICAgICAgICAgZW1pdFB1dEdsb2Jh
bFZhcmlhYmxlSW5kaXJlY3QoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3QpLCB2
YWx1ZSwgJm1ldGFkYXRhLndhdGNocG9pbnRTZXQpOwogICAgICAgICAgICAgZWxzZQotICAgICAg
ICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSo+KCpv
cGVyYW5kU2xvdCksIHZhbHVlLCBjdXJyZW50SW5zdHJ1Y3Rpb25bNV0udS53YXRjaHBvaW50U2V0
KTsKKyAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFyaWFibGUoYml0d2lzZV9jYXN0PEpT
VmFsdWUqPigqb3BlcmFuZFNsb3QpLCB2YWx1ZSwgbWV0YWRhdGEud2F0Y2hwb2ludFNldCk7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIExvY2FsQ2xvc3VyZVZh
cjoKQEAgLTk5Myw3ICsxMDUwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgICAgICAgICBlbWl0V3JpdGVCYXJyaWVyKHNjb3Bl
LCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUpOwogICAgICAgICAgICAgZW1pdFZhckluamVjdGlv
bkNoZWNrKG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKHJlc29sdmVUeXBlKSk7Ci0gICAgICAgICAg
ICBlbWl0UHV0Q2xvc3VyZVZhcihzY29wZSwgKm9wZXJhbmRTbG90LCB2YWx1ZSwgY3VycmVudElu
c3RydWN0aW9uWzVdLnUud2F0Y2hwb2ludFNldCk7CisgICAgICAgICAgICBlbWl0UHV0Q2xvc3Vy
ZVZhcihzY29wZSwgKm9wZXJhbmRTbG90LCB2YWx1ZSwgbWV0YWRhdGEud2F0Y2hwb2ludFNldCk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CiAgICAgICAgIGNh
c2UgRHluYW1pYzoKQEAgLTEwNDEsMTIgKzEwOTgsMTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X3RvX3Njb3BlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgfQogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAotICAgIEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IEdl
dFB1dEluZm8oY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZCk7Ci0gICAgUmVzb2x2ZVR5
cGUgcmVzb2x2ZVR5cGUgPSBnZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7CisgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOworICAgIFJlc29s
dmVUeXBlIHJlc29sdmVUeXBlID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSkucmVzb2x2ZVR5
cGUoKTsKICAgICBpZiAocmVzb2x2ZVR5cGUgPT0gTW9kdWxlVmFyKSB7CiAgICAgICAgIEpJVFNs
b3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3Bh
dGhfdGhyb3dfc3RyaWN0X21vZGVfcmVhZG9ubHlfcHJvcGVydHlfd3JpdGVfZXJyb3IpOwogICAg
ICAgICBzbG93UGF0aENhbGwuY2FsbCgpOwpAQCAtMTA1NCwyNCArMTExMSwyNiBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93QwogICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFRvU2Nv
cGUsIGN1cnJlbnRJbnN0cnVjdGlvbik7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2dldF9mcm9t
X2FyZ3VtZW50cyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2Zyb21fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7
Ci0gICAgaW50IGFyZ3VtZW50cyA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0g
ICAgaW50IGluZGV4ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEZyb21Bcmd1bWVudHM+KCk7
CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKKyAgICBpbnQgYXJndW1lbnRz
ID0gYnl0ZWNvZGUuYXJndW1lbnRzLm9mZnNldCgpOworICAgIGludCBpbmRleCA9IGJ5dGVjb2Rl
LmluZGV4OwogICAgIAogICAgIGVtaXRMb2FkUGF5bG9hZChhcmd1bWVudHMsIHJlZ1QwKTsKICAg
ICBsb2FkMzIoQWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkg
KyBpbmRleCAqIHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICsgVGFnT2Zmc2V0KSwgcmVn
VDEpOwogICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VP
ZmZzZXQoKSArIGluZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKyBQYXlsb2Fk
T2Zmc2V0KSwgcmVnVDApOwotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKKyAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7CiAgICAg
ZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X3RvX2FyZ3VtZW50cyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X3RvX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewotICAgIGludCBhcmd1bWVudHMgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kOwotICAgIGludCBpbmRleCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7
Ci0gICAgaW50IHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvQXJndW1lbnRzPigp
OworICAgIGludCBhcmd1bWVudHMgPSBieXRlY29kZS5hcmd1bWVudHMub2Zmc2V0KCk7CisgICAg
aW50IGluZGV4ID0gYnl0ZWNvZGUuaW5kZXg7CisgICAgaW50IHZhbHVlID0gYnl0ZWNvZGUudmFs
dWUub2Zmc2V0KCk7CiAgICAgCiAgICAgZW1pdFdyaXRlQmFycmllcihhcmd1bWVudHMsIHZhbHVl
LCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1JlZ2lzdGVyU2V0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVn
aXN0ZXJTZXQuY3BwCmluZGV4IGEzZWU3NDczN2RhNzNiZGUyZjVhZGE3MmZmZTNmZTlmNDE4MTA2
OTMuLjViYWQzZWYwNmY1ZmY0MmU3NDQ2ZTFkN2ZhN2Y4MWNiYTE0ZjU0N2MgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvUmVnaXN0ZXJTZXQuY3BwCkBAIC0yMDEsNiArMjAxLDggQEAgUmVn
aXN0ZXJTZXQgUmVnaXN0ZXJTZXQ6OnZtQ2FsbGVlU2F2ZVJlZ2lzdGVycygpCiAgICAgcmVzdWx0
LnNldChGUFJJbmZvOjpmcFJlZ0NTNSk7CiAgICAgcmVzdWx0LnNldChGUFJJbmZvOjpmcFJlZ0NT
Nik7CiAgICAgcmVzdWx0LnNldChGUFJJbmZvOjpmcFJlZ0NTNyk7CisjZWxpZiBDUFUoQVJNX1RI
VU1CMikKKyAgICByZXN1bHQuc2V0KEdQUkluZm86OnJlZ0NTMCk7CiAjZW5kaWYKICAgICByZXR1
cm4gcmVzdWx0OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xM
SW50RGF0YS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNwcApp
bmRleCAzNTlkNWVmOGY2NTUzMTM0NGNiNGU2ZDhiNGRjZjY4NGIwYzYxYzFiLi5mYTlhN2VkNDJh
YWYxYWUzODNlYTU1YTQzYjFhY2ZjYTdiNWI2MGM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTExJbnREYXRhLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTExJbnREYXRhLmNwcApAQCAtMTM0LDcgKzEzNCw3IEBAIHZvaWQgRGF0YTo6cGVyZm9y
bUFzc2VydGlvbnMoVk0mIHZtKQogI2lmIEVOQUJMRShDX0xPT1ApCiAgICAgQVNTRVJUKENvZGVC
bG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpID09
IDEpOwogI2VsaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBBU1NFUlQoIUNvZGVCbG9jazo6bGxp
bnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpKTsKKyAgICBBU1NF
UlQoQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0
ZXJzKCkgPT0gMSk7CiAjZWxpZiAoQ1BVKFg4Nl82NCkgJiYgIU9TKFdJTkRPV1MpKSAgfHwgQ1BV
KEFSTTY0KQogICAgIEFTU0VSVChDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3Bh
Y2VBc1ZpcnR1YWxSZWdpc3RlcnMoKSA9PSA0KTsKICNlbGlmIChDUFUoWDg2XzY0KSAmJiBPUyhX
SU5ET1dTKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyLmFzbSBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyLmFzbQppbmRleCA0MTZmM2JhNzNhOGU0YWY2MGNhZmUxMGYxMmNhZmUzZDZmMmYy
MmUxLi5jODcwNGZlMjRmOGRmMTc1NDc0ZmQyOGYxNzk5YTQ2MDY2MDk0MmY5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCkBA
IC01OTYsNiArNTk2LDM2IEBAIGlmIFg4Nl82NCBvciBBUk02NCBvciBBUk02NEUKICAgICAgICAg
ICAgIHBvcCBsciwgY2ZyCiAgICAgICAgIGVuZAogICAgIGVuZAorZWxzaWYgQVJNdjcKKyAgICBt
YWNybyBwcm9iZShhY3Rpb24pCisgICAgICAgIHB1c2ggYTAKKyAgICAgICAgcHVzaCBhMQorICAg
ICAgICBwdXNoIGEyCisgICAgICAgIHB1c2ggYTMKKyAgICAgICAgcHVzaCB0MAorICAgICAgICBw
dXNoIHQxCisgICAgICAgIHB1c2ggdDIKKyAgICAgICAgcHVzaCB0MworICAgICAgICBwdXNoIHQ0
CisgICAgICAgIHB1c2ggdDUKKyAgICAgICAgcHVzaCBscgorICAgICAgICBwdXNoIGNzcjAKKwor
ICAgICAgICBhY3Rpb24oKQorCisgICAgICAgIHBvcCBjc3IwCisgICAgICAgIHBvcCBscgorICAg
ICAgICBwb3AgdDUKKyAgICAgICAgcG9wIHQ0CisgICAgICAgIHBvcCB0MworICAgICAgICBwb3Ag
dDIKKyAgICAgICAgcG9wIHQxCisgICAgICAgIHBvcCB0MAorICAgICAgICBwb3AgYTMKKyAgICAg
ICAgcG9wIGEyCisgICAgICAgIHBvcCBhMQorICAgICAgICBwb3AgYTAKKyAgICBlbmQKIGVsc2UK
ICAgICBtYWNybyBwcm9iZShhY3Rpb24pCiAgICAgZW5kCkBAIC03NTksNyArNzg5LDcgQEAgbWFj
cm8gcmVzdG9yZUNhbGxlZVNhdmVzVXNlZEJ5TExJbnQoKQogZW5kCiAKIG1hY3JvIGNvcHlDYWxs
ZWVTYXZlc1RvVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0sIHRlbXApCi0gICAgaWYg
QVJNNjQgb3IgQVJNNjRFIG9yIFg4Nl82NCBvciBYODZfNjRfV0lOCisgICAgaWYgQVJNNjQgb3Ig
QVJNNjRFIG9yIFg4Nl82NCBvciBYODZfNjRfV0lOIG9yIEFSTXY3CiAgICAgICAgIGxvYWRwIFZN
Ojp0b3BFbnRyeUZyYW1lW3ZtXSwgdGVtcAogICAgICAgICB2bUVudHJ5UmVjb3JkKHRlbXAsIHRl
bXApCiAgICAgICAgIGxlYXAgVk1FbnRyeVJlY29yZDo6Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZl
clt0ZW1wXSwgdGVtcApAQCAtNzk2LDEyICs4MjYsMTQgQEAgbWFjcm8gY29weUNhbGxlZVNhdmVz
VG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSwgdGVtcCkKICAgICAgICAgICAgIHN0
b3JlcSBjc3I0LCAzMlt0ZW1wXQogICAgICAgICAgICAgc3RvcmVxIGNzcjUsIDQwW3RlbXBdCiAg
ICAgICAgICAgICBzdG9yZXEgY3NyNiwgNDhbdGVtcF0KKyAgICAgICAgZWxzaWYgQVJNdjcKKyAg
ICAgICAgICAgIHN0b3JlcCBjc3IwLCBbdGVtcF0KICAgICAgICAgZW5kCiAgICAgZW5kCiBlbmQK
IAogbWFjcm8gcmVzdG9yZUNhbGxlZVNhdmVzRnJvbVZNRW50cnlGcmFtZUNhbGxlZVNhdmVzQnVm
ZmVyKHZtLCB0ZW1wKQotICAgIGlmIEFSTTY0IG9yIEFSTTY0RSBvciBYODZfNjQgb3IgWDg2XzY0
X1dJTgorICAgIGlmIEFSTTY0IG9yIEFSTTY0RSBvciBYODZfNjQgb3IgWDg2XzY0X1dJTiBvciBB
Uk12NwogICAgICAgICBsb2FkcCBWTTo6dG9wRW50cnlGcmFtZVt2bV0sIHRlbXAKICAgICAgICAg
dm1FbnRyeVJlY29yZCh0ZW1wLCB0ZW1wKQogICAgICAgICBsZWFwIFZNRW50cnlSZWNvcmQ6OmNh
bGxlZVNhdmVSZWdpc3RlcnNCdWZmZXJbdGVtcF0sIHRlbXAKQEAgLTgzOCw2ICs4NzAsOCBAQCBt
YWNybyByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIo
dm0sIHRlbXApCiAgICAgICAgICAgICBsb2FkcSAzMlt0ZW1wXSwgY3NyNAogICAgICAgICAgICAg
bG9hZHEgNDBbdGVtcF0sIGNzcjUKICAgICAgICAgICAgIGxvYWRxIDQ4W3RlbXBdLCBjc3I2Cisg
ICAgICAgIGVsc2lmIEFSTXY3CisgICAgICAgICAgICBsb2FkcCBbdGVtcF0sIGNzcjAKICAgICAg
ICAgZW5kCiAgICAgZW5kCiBlbmQKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1NhbXBsaW5nUHJvZmlsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU2FtcGxpbmdQcm9maWxlci5jcHAKaW5kZXggZTJhNzM5M2VkYTg4ZTExYTgyZWY3NzM1MTU5
NzgwMjViNDcwNzNmOS4uMGYzZDA0OTVlNzViMTE3MzRhZTQ3NTNhNzY1OGY4NWYzMzZlYjRmNyAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxl
ci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxl
ci5jcHAKQEAgLTQ0MCw3ICs0NDAsMTUgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgdW5zaWduZWQg
dHJ5R2V0Qnl0ZWNvZGVJbmRleCh1bnNpZ25lZCBsbGludFBDLCBDb2RlQmxvY2sqIGMKICAgICBy
ZXR1cm4gMDsKICNlbHNlCiAgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gYml0d2lzZV9j
YXN0PEluc3RydWN0aW9uKj4obGxpbnRQQyk7Ci0gICAgaWYgKGluc3RydWN0aW9uID49IGNvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSAmJiBpbnN0cnVjdGlvbiA8IGNvZGVCbG9jay0+
aW5zdHJ1Y3Rpb25zKCkuZW5kKCkpIHsKKworICAgIGlmICghY29kZUJsb2NrLT5pbnN0cnVjdGlv
bnMoKS5zaXplKCkpIHsKKyAgICAgICAgaXNWYWxpZCA9IGZhbHNlOworICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisKKyAgICBjb25zdCBJbnN0cnVjdGlvbiogYmVnaW4gPSBjb2RlQmxvY2stPmlu
c3RydWN0aW9ucygpLmF0KDApLnB0cigpOworICAgIGNvbnN0IEluc3RydWN0aW9uKiBlbmQgPSBy
ZWludGVycHJldF9jYXN0PGNvbnN0IEluc3RydWN0aW9uKj4ocmVpbnRlcnByZXRfY2FzdDxjb25z
dCB1aW50OF90Kj4oYmVnaW4pICsgY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5zaXplKCkpOwor
ICAgIGlmIChpbnN0cnVjdGlvbiA+PSBiZWdpbiAmJiBpbnN0cnVjdGlvbiA8IGVuZCkgewogICAg
ICAgICBpc1ZhbGlkID0gdHJ1ZTsKICAgICAgICAgcmV0dXJuIGNvZGVCbG9jay0+Ynl0ZWNvZGVP
ZmZzZXQoaW5zdHJ1Y3Rpb24pOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL1Bs
YXRmb3JtLmggYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCmluZGV4IGUyZWI3NWJjZGIzM2E3
MzEzNjQwMmRjZDAxMmRhMDc2M2ZlNjhkNmUuLmIzZjEyNGRiYmI1OTVhYzRlMzg4NTdkZmRmODc0
MzI5MGNlNDFlMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKKysrIGIv
U291cmNlL1dURi93dGYvUGxhdGZvcm0uaApAQCAtNzU3LDEyICs3NTcsMTkgQEAKICNkZWZpbmUg
RU5BQkxFX0pJVCAxCiAjZW5kaWYKIAotLyogRGlzYWJsZSBKSVQgZm9yIDMyLWJpdCBidWlsZHMu
ICovCiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyNpZiBDUFUoQVJNX1RIVU1CMikgJiYgT1MoTElO
VVgpCisvKiBPbiBBUk12Ny9MaW51eCB0aGUgSklUIGlzIGVuYWJsZWQgdW5sZXNzIGV4cGxpY2l0
bHkgZGlzYWJsZWQuICovCisjaWYgIWRlZmluZWQoRU5BQkxFX0pJVCkKKyNkZWZpbmUgRU5BQkxF
X0pJVCAxCisjZW5kaWYKKy8qIEJ1dCBzdGlsbCBkaXNhYmxlIERGRyBmb3Igbm93LiAqLworI3Vu
ZGVmIEVOQUJMRV9ERkdfSklUCisjZGVmaW5lIEVOQUJMRV9ERkdfSklUIDAKKyNlbHNlCisvKiBE
aXNhYmxlIEpJVCBhbmQgZm9yY2UgQ19MT09QIG9uIGFsbCAzMmJpdC1hcmNoaXRlY3R1cmVzIGJ1
dCBBUk12Ny1UaHVtYjIvTGludXguICovCiAjdW5kZWYgRU5BQkxFX0pJVAogI2RlZmluZSBFTkFC
TEVfSklUIDAKLS8qIEZvcmNlIENfTE9PUCBvbiBhbGwgYXJjaGl0ZWN0dXJlcyBidXQgQVJNdjct
VGh1bWIyL0xpbnV4LiAqLwotI2lmICEoQ1BVKEFSTV9USFVNQjIpICYmIE9TKExJTlVYKSkKICN1
bmRlZiBFTkFCTEVfQ19MT09QCiAjZGVmaW5lIEVOQUJMRV9DX0xPT1AgMQogI2VuZGlmCmRpZmYg
LS1naXQgYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0lzb1BhZ2VJbmxpbmVzLmggYi9Tb3VyY2Uv
Ym1hbGxvYy9ibWFsbG9jL0lzb1BhZ2VJbmxpbmVzLmgKaW5kZXggMGM0Nzg2NGM3YjQ5YTBlZWM4
YTI2MTBjZWY2N2ZhMzI4YTRlZjRjNC4uMTJiMzE4MzBjMjI1ZDJmNzBkNDcyM2EzZDAxZWU3ODM3
YTc3OGU0NiAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Jc29QYWdlSW5saW5l
cy5oCisrKyBiL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSXNvUGFnZUlubGluZXMuaApAQCAtMTg4
LDcgKzE4OCw3IEBAIEZyZWVMaXN0IElzb1BhZ2U8Q29uZmlnPjo6c3RhcnRBbGxvY2F0aW5nKCkK
ICAgICAgICAgY2hhciogY2VsbEJ5dGUgPSByZWludGVycHJldF9jYXN0PGNoYXIqPih0aGlzKSAr
IGluZGV4ICogQ29uZmlnOjpvYmplY3RTaXplOwogICAgICAgICBpZiAodmVyYm9zZSkKICAgICAg
ICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXA6IHB1dHRpbmcgJXAgb24gZnJlZSBsaXN0LlxuIiwg
dGhpcywgY2VsbEJ5dGUpOwotICAgICAgICBGcmVlQ2VsbCogY2VsbCA9IHJlaW50ZXJwcmV0X2Nh
c3Q8RnJlZUNlbGwqPihjZWxsQnl0ZSk7CisgICAgICAgIEZyZWVDZWxsKiBjZWxsID0gYml0d2lz
ZV9jYXN0PEZyZWVDZWxsKj4oY2VsbEJ5dGUpOwogICAgICAgICBjZWxsLT5zZXROZXh0KGhlYWQs
IHNlY3JldCk7CiAgICAgICAgIGhlYWQgPSBjZWxsOwogICAgICAgICBieXRlcyArPSBDb25maWc6
Om9iamVjdFNpemU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvV2ViS2l0RmVhdHVyZXMuY21h
a2UgYi9Tb3VyY2UvY21ha2UvV2ViS2l0RmVhdHVyZXMuY21ha2UKaW5kZXggMmQ1NWY5NWFiYWFm
NmFlMTVlOTNiZDdkN2VhYWIwY2I5OWU4MDRlMi4uMjE4OTBlY2JmZWJkYjM4ZDhlM2Y2ZDE5ODgw
MTEwMTcwMzVhNTdhZCAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL1dlYktpdEZlYXR1cmVzLmNt
YWtlCisrKyBiL1NvdXJjZS9jbWFrZS9XZWJLaXRGZWF0dXJlcy5jbWFrZQpAQCAtNjksNyArNjks
NyBAQCBtYWNybyhXRUJLSVRfT1BUSU9OX0JFR0lOKQogICAgICAgICBzZXQoRU5BQkxFX0NfTE9P
UF9ERUZBVUxUIE9GRikKICAgICAgICAgc2V0KEVOQUJMRV9TQU1QTElOR19QUk9GSUxFUl9ERUZB
VUxUIE9OKQogICAgIGVsc2VpZiAoV1RGX0NQVV9BUk0gQU5EIFdURl9PU19VTklYKQotICAgICAg
ICBzZXQoRU5BQkxFX0pJVF9ERUZBVUxUIE9GRikKKyAgICAgICAgc2V0KEVOQUJMRV9KSVRfREVG
QVVMVCBPTikKICAgICAgICAgc2V0KEVOQUJMRV9GVExfREVGQVVMVCBPRkYpCiAgICAgICAgIHNl
dChVU0VfU1lTVEVNX01BTExPQ19ERUZBVUxUIE9GRikKICAgICAgICAgc2V0KEVOQUJMRV9DX0xP
T1BfREVGQVVMVCBPRkYpCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cKaW5kZXgg
YzJkMmIwNzBhNTJlNGZkM2EzMTcxMDhjZjI4Y2I1ZWYxY2FlYTJlNC4uMzRkZGExY2ExOTJhMWFm
M2JkYTgwYjk4NjIzODgwODc1NDlmZGEyZSAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0No
YW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE4LTExLTEyICBEb21pbmlrIEluZnVlaHIgIDxk
aW5mdWVockBpZ2FsaWEuY29tPgorCisgICAgICAgIEVuYWJsZSBKSVQgb24gQVJNL0xpbnV4Cisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTE1NDgKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFbmFibGUgSklU
IGJ5IGRlZmF1bHQgb24gQVJNdjcvTGludXggYWZ0ZXIgaXQgd2FzIGRpc2FibGVkIHdpdGgKKyAg
ICAgICAgcmVjZW50IGJ5dGNvZGUgZm9ybWF0IGNoYW5nZS4KKworICAgICAgICAqIFNvdXJjZS9j
bWFrZS9XZWJLaXRGZWF0dXJlcy5jbWFrZToKKwogMjAxOC0xMS0wNyAgQ2FybG9zIEdhcmNpYSBD
YW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0xpbnV4XSBVc2UgbWVtZmRf
Y3JlYXRlIHdoZW4gYXZhaWxhYmxlIGluIFNoYXJlZE1lbW9yeSBpbXBsZW1lbnRhdGlvbgpkaWZm
IC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VMb2cgYi9KU1Rlc3RzL0NoYW5nZUxvZwppbmRleCA3N2Rj
NjY2NGI0MTZjMTY0NjgyYzU2NTJjMjlmNDI2ZTk3ZWVlNDZlLi5lYzE4Yzk2YTFjYjgyMTg5Zjdk
ODg2YjJjMTlkMDFkNWM3YWVlZGRhIDEwMDY0NAotLS0gYS9KU1Rlc3RzL0NoYW5nZUxvZworKysg
Yi9KU1Rlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE4LTExLTEyICBEb21pbmlr
IEluZnVlaHIgIDxkaW5mdWVockBpZ2FsaWEuY29tPgorCisgICAgICAgIEVuYWJsZSBKSVQgb24g
QVJNL0xpbnV4CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xOTE1NDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBEaXNhYmxlIHRlc3Qgb24gc3lzdGVtIHdpdGggbGltaXRlZCBtZW1vcnkuIFByb2dyYW0gd2Fz
IGtpbGxlZCBieQorICAgICAgICB0aGUgT1MgYmVmb3JlIHRoZSBleGNlcHRpb24gd2FzIHRocm93
bi4KKworICAgICAgICAqIHNsb3dNaWNyb2JlbmNobWFya3MvZnVuY3Rpb24tY29uc3RydWN0b3It
d2l0aC1odWdlLXN0cmluZ3MuanM6CisKIDIwMTgtMTEtMDggIFJvc3MgS2lyc2xpbmcgIDxyb3Nz
LmtpcnNsaW5nQHNvbnkuY29tPgogCiAgICAgICAgIFUrMTgwRSBpcyBubyBsb25nZXIgYSB3aGl0
ZXNwYWNlIGNoYXJhY3RlcgpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zbG93TWljcm9iZW5jaG1hcmtz
L2Z1bmN0aW9uLWNvbnN0cnVjdG9yLXdpdGgtaHVnZS1zdHJpbmdzLmpzIGIvSlNUZXN0cy9zbG93
TWljcm9iZW5jaG1hcmtzL2Z1bmN0aW9uLWNvbnN0cnVjdG9yLXdpdGgtaHVnZS1zdHJpbmdzLmpz
CmluZGV4IGM2MTNlZDg0ODNjMTM3MDRkYjBhMjA2NWY5MmYxMzNhODQ4M2I0ZWUuLjg2NjE3MDU2
MTVmODU2N2U1MTk1ZTYwOGMwOTc0MDZmM2ExMjVkZGEgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvc2xv
d01pY3JvYmVuY2htYXJrcy9mdW5jdGlvbi1jb25zdHJ1Y3Rvci13aXRoLWh1Z2Utc3RyaW5ncy5q
cworKysgYi9KU1Rlc3RzL3Nsb3dNaWNyb2JlbmNobWFya3MvZnVuY3Rpb24tY29uc3RydWN0b3It
d2l0aC1odWdlLXN0cmluZ3MuanMKQEAgLTEsMyArMSw0IEBACisvL0Agc2tpcCBpZiAkbWVtb3J5
TGltaXRlZAogdmFyIGh1Z2VTdHJpbmcgPSAieCI7CiBmb3IgKGkgPSAwOyBpIDwgMjU7ICsraSkg
ewogICAgIGh1Z2VTdHJpbmcgKz0gaHVnZVN0cmluZzsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>355322</attachid>
            <date>2018-11-20 01:06:44 -0800</date>
            <delta_ts>2018-11-20 12:44:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191548-20181120100642.patch</filename>
            <type>text/plain</type>
            <size>138229</size>
            <attacher name="Dominik Inführ">dominik.infuehr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM4MzkzCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
ZjIwNzNmMGY0NjNjMTYzYzIzNWQzMjMwZWNjNTBhNTc0OThlMmFjLi5hM2M5MDQyN2RkMmNkMmFm
MmJjZThiNWVlYTlkZmEwMTk3Yjk5ZmJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxODkgQEAKKzIwMTgtMTEtMTIgIERvbWluaWsgSW5mdWVociAgPGRpbmZ1ZWhyQGlnYWxp
YS5jb20+CisKKyAgICAgICAgRW5hYmxlIEpJVCBvbiBBUk0vTGludXgKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTU0OAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEVuYWJsZSBKSVQgYnkgZGVmYXVsdCBv
biBBUk12Ny9MaW51eCBhZnRlciBpdCB3YXMgZGlzYWJsZWQgd2l0aAorICAgICAgICByZWNlbnQg
Ynl0Y29kZSBmb3JtYXQgY2hhbmdlLgorCisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpnZXRJQ1N0YXR1c01hcCk6CisgICAgICAgICog
Ynl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6bWV0YWRhdGEp
OgorICAgICAgICAqIGJ5dGVjb2RlL0luQnlJZFN0YXR1cy5jcHA6CisgICAgICAgIChKU0M6Oklu
QnlJZFN0YXR1czo6Y29tcHV0ZUZvcik6CisgICAgICAgICogYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24u
aDoKKyAgICAgICAgKEpTQzo6SW5zdHJ1Y3Rpb246OmNhc3QpOgorICAgICAgICAqIGJ5dGVjb2Rl
L01ldGFkYXRhVGFibGUuaDoKKyAgICAgICAgKEpTQzo6TWV0YWRhdGFUYWJsZTo6Zm9yRWFjaCk6
CisgICAgICAgICogYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5jcHA6CisgICAgICAgIChKU0M6OlB1
dEJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IpOgorICAgICAgICAoSlNDOjpQdXRCeUlkU3RhdHVzOjpo
YXNFeGl0U2l0ZSk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvUHV0QnlJZFN0YXR1cy5o
OgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpyZWlm
eUlubGluZWRDYWxsRnJhbWVzKToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29t
bW9uLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpyZWlmeUlubGluZWRDYWxsRnJhbWVzKToKKyAg
ICAgICAgKiBnZW5lcmF0b3IvQXJndW1lbnQucmI6CisgICAgICAgICogZ2VuZXJhdG9yL09wY29k
ZS5yYjoKKyAgICAgICAgKiBqaXQvR1BSSW5mby5oOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAg
ICAgICAgKiBqaXQvSklUQXJpdGhtZXRpYzMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X2NvbXBhcmVBbmRKdW1wKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVVbnNp
Z25lZEFuZEp1bXApOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF91bnNpZ25lZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9p
bmMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZGVjKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0QmluYXJ5RG91YmxlT3ApOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbW9kKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9tb2QpOgorICAgICAgICAqIGppdC9KSVRD
YWxsMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX3JldCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNs
b3dfb3BfY2FsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9jYWxsX2V2YWwpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRTbG93X29wX2NhbGxfdmFyYXJncyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93
X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93
X29wX2NvbnN0cnVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jYWxsKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3RhaWxfY2FsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9jYWxsX2V2YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2FsbF92YXJhcmdz
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3RhaWxfY2FsbF92YXJhcmdzKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jb25zdHJ1Y3RfdmFyYXJncyk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9jb25zdHJ1Y3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVTZXR1
cEZyYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWwpOgorICAgICAgICAo
SlNDOjpKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6SklUOjpj
b21waWxlT3BDYWxsKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2Up
OgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVTZXR1cFZhcmFyZ3NGcmFtZSk6IERlbGV0ZWQu
CisgICAgICAgICogaml0L0pJVElubGluZXMuaDoKKyAgICAgICAgKEpTQzo6SklUOjp1cGRhdGVU
b3BDYWxsRnJhbWUpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2NhdGNoKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9s
b29wX2hpbnQpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzMzJfNjQuY3BwOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfbW92KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VuZCk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbXApOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfbmV3X29iamVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfbmV3X29i
amVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNl
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2luc3RhbmNlb2YpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZl9jdXN0b20pOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRTbG93X29wX2luc3RhbmNlb2YpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2lu
c3RhbmNlb2ZfY3VzdG9tKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX2VtcHR5KToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX3VuZGVmaW5lZCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9pc19ib29sZWFuKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lz
X251bWJlcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pc19jZWxsX3dpdGhfdHlwZSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pc19vYmplY3QpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Nl
dF9mdW5jdGlvbl9uYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX25vdCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZmFsc2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfanRydWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfamVxX251bGwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX2puZXFfcHRyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VxKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0U2xvd19vcF9lcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9q
ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2plcSk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9uZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX25lcSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qbmVxKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0U2xvd19vcF9qbmVxKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BTdHJpY3RFcSk6
CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zdHJpY3RlcSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF9uc3RyaWN0ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcFN0cmlj
dEVxSnVtcCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qc3RyaWN0ZXEpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3Bfam5zdHJpY3RlcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3BfanN0cmljdGVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9qbnN0
cmljdGVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2VxX251bGwpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfbmVxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
dGhyb3cpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG9fbnVtYmVyKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX3RvX3N0cmluZyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF90b19vYmplY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2F0Y2gpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfaWRlbnRpdHlfd2l0aF9wcm9maWxlKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2dldF9wYXJlbnRfc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3Bfc3dpdGNoX2ltbSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zd2l0Y2hfY2hh
cik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX2RlYnVnKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2Vu
dGVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9zY29wZSk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF90b190aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NoZWNrX3Rkeik6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KToKKyAgICAgICAg
KEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eSk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfZ2V0X2RpcmVjdF9wbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9l
bnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9l
bnVtZXJhdG9yX2dlbmVyaWNfcG5hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHJv
ZmlsZV90eXBlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tl
bl9wcm9sb2d1ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNr
ZW5fdGFpbCk6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X3B1dF9nZXR0ZXJfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9zZXR0
ZXJfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2RlbF9ieV9pZCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWxfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0X29wX2dldF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRHZXRCeVZhbFdpdGhD
YWNoZWRJZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsX2RpcmVjdCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0R2Vu
ZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEFycmF5U3Rv
cmFnZVB1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0QnlWYWxXaXRoQ2FjaGVk
SWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9n
ZXRfYnlfaWRfZGlyZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlf
aWRfZGlyZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9ieV9pZCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX2dldF9ieV9pZF93aXRoX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRT
bG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
cHV0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5fYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRTbG93X29wX2luX2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3Jlc29s
dmVfc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0X29wX3B1dF90b19zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3BfcHV0X3RvX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dldF9m
cm9tX2FyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfdG9fYXJndW1l
bnRzKToKKyAgICAgICAgKiBqaXQvUmVnaXN0ZXJTZXQuY3BwOgorICAgICAgICAoSlNDOjpSZWdp
c3RlclNldDo6dm1DYWxsZWVTYXZlUmVnaXN0ZXJzKToKKyAgICAgICAgKiBsbGludC9MTEludERh
dGEuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6RGF0YTo6cGVyZm9ybUFzc2VydGlvbnMpOgor
ICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtOgorICAgICAgICAqIHJ1bnRp
bWUvU2FtcGxpbmdQcm9maWxlci5jcHA6CisgICAgICAgIChKU0M6OnRyeUdldEJ5dGVjb2RlSW5k
ZXgpOgorCiAyMDE4LTExLTIwICBGdWppaSBIaXJvbm9yaSAgPEhpcm9ub3JpLkZ1amlpQHNvbnku
Y29tPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjIzODAzOSkgV2ViQ29yZTo6SlNET01HbG9iYWxP
YmplY3Q6OmNyZWF0ZVN0cnVjdHVyZSBpcyB1c2luZyBKU0M6OlN0cnVjdHVyZTo6Y3JlYXRlIHdp
dGhvdXQgaW5jbHVkaW5nIFN0cnVjdHVyZUlubGluZXMuaApkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri9DaGFuZ2VMb2cgYi9Tb3VyY2UvV1RGL0NoYW5nZUxvZwppbmRleCBkMTFkOWRlZjhiMTM4Yjcx
MTE2MDFhYWJlY2EzNThkODEwMTAyYTc3Li5jNmY1YWZhYTJiNGJkOTMwOWE0OGI4ZTBhM2ZlNTIw
Nzg4Njk1ZWJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL0NoYW5nZUxvZworKysgYi9Tb3VyY2Uv
V1RGL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE4LTExLTEyICBEb21pbmlrIEluZnVl
aHIgIDxkaW5mdWVockBpZ2FsaWEuY29tPgorCisgICAgICAgIEVuYWJsZSBKSVQgb24gQVJNL0xp
bnV4CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTE1
NDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFbmFi
bGUgSklUIGJ5IGRlZmF1bHQgb24gQVJNdjcvTGludXggYWZ0ZXIgaXQgd2FzIGRpc2FibGVkIHdp
dGgKKyAgICAgICAgcmVjZW50IGJ5dGNvZGUgZm9ybWF0IGNoYW5nZS4KKworICAgICAgICAqIHd0
Zi9QbGF0Zm9ybS5oOgorCiAyMDE4LTExLTE0ICBLZWl0aCBSb2xsaW4gIDxrcm9sbGluQGFwcGxl
LmNvbT4KIAogICAgICAgICBGaXggI2VuZCB2cy4gI2VuZGlmIHR5cG8uCmRpZmYgLS1naXQgYS9T
b3VyY2UvYm1hbGxvYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvYm1hbGxvYy9DaGFuZ2VMb2cKaW5kZXgg
MzdhZGZlODBiODFhM2VjZmM5ZGE1NDNmMGU3Yzc1YzRlYjA0NWYxZi4uMjYxZDY5ZTEzODYzZWFi
MDNhMWYxMmI0ZGQxNjBhNzY0ZTVlMTY2NCAxMDA2NDQKLS0tIGEvU291cmNlL2JtYWxsb2MvQ2hh
bmdlTG9nCisrKyBiL1NvdXJjZS9ibWFsbG9jL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisy
MDE4LTExLTEyICBEb21pbmlrIEluZnVlaHIgIDxkaW5mdWVockBpZ2FsaWEuY29tPgorCisgICAg
ICAgIEVuYWJsZSBKSVQgb24gQVJNL0xpbnV4CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xOTE1NDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIGJtYWxsb2MvSXNvUGFnZUlubGluZXMuaDoKKyAgICAgICAg
KGJtYWxsb2M6Oklzb1BhZ2U8Q29uZmlnPjo6c3RhcnRBbGxvY2F0aW5nKToKKwogMjAxOC0xMS0w
MSAgSmlld2VuIFRhbiAgPGppZXdlbl90YW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJlcGxhY2Ug
Q29tbW9uUmFuZG9tIFNQSSB3aXRoIEFQSQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVCbG9jay5oCmluZGV4IDI5YTYwNWI5ZjYwNjcyMzMzMjkwYWI2ZjQwNzc3OGM0ODhiYzg1
ZGQuLmU3YzY2ZTI1MzQwZjg2ZDZhMGFhOWI0MDhhOGNhNmQ0NDdkYWFjMmIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKQEAgLTg2MCw3ICs4NjAsNyBAQCBw
dWJsaWM6CiAgICAgTWV0YWRhdGEmIG1ldGFkYXRhKE9wY29kZUlEIG9wY29kZUlELCB1bnNpZ25l
ZCBtZXRhZGF0YUlEKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fbWV0YWRhdGEpOwotICAgICAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxNZXRhZGF0YSo+KG1fbWV0YWRhdGEtPmdldChvcGNv
ZGVJRCkpW21ldGFkYXRhSURdOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PE1ldGFkYXRh
Kj4obV9tZXRhZGF0YS0+Z2V0KG9wY29kZUlEKSlbbWV0YWRhdGFJRF07CiAgICAgfQogCiAgICAg
c2l6ZV90IG1ldGFkYXRhU2l6ZUluQnl0ZXMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvSW5zdHJ1Y3Rpb24uaAppbmRleCBkOTRmYzY3MThkNTNhYzkwYWNmZDZjZDI1MWIyMzQ4
MmE3Njk1NDI0Li5jYjgyNmNkZmI1ZTVkM2Y5NWQzMjk0ZTU2YTJiMDRjNWQ0NDdjMDBmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaApAQCAtOTEsNyAr
OTEsNyBAQCBwdWJsaWM6CiAgICAgVCogY2FzdCgpCiAgICAgewogICAgICAgICBBU1NFUlQoaXM8
VD4oKSk7Ci0gICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFQqPih0aGlzKTsKKyAgICAg
ICAgcmV0dXJuIGJpdHdpc2VfY2FzdDxUKj4odGhpcyk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8
Y2xhc3MgVD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRh
ZGF0YVRhYmxlLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0YWRhdGFUYWJs
ZS5oCmluZGV4IDYwY2RlNWY1YWExMjgxNTIyOGIzNjZjMDg5OTA1MmU1NzM1OGZjYWUuLmE1ZDQx
MjFiMWQ0MWQxNjFiZjI2NTQyZTA5Mjg2Y2ZiZDk5Mzk1YjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRhZGF0YVRhYmxlLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL01ldGFkYXRhVGFibGUuaApAQCAtNTUsOCArNTUsOCBAQCBwdWJs
aWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgT3AsIHR5cGVuYW1lIEZ1bmN0b3I+CiAgICAgQUxX
QVlTX0lOTElORSB2b2lkIGZvckVhY2goY29uc3QgRnVuY3RvciYgZnVuYykKICAgICB7Ci0gICAg
ICAgIGF1dG8qIG1ldGFkYXRhID0gcmVpbnRlcnByZXRfY2FzdDx0eXBlbmFtZSBPcDo6TWV0YWRh
dGEqPihnZXQoT3A6Om9wY29kZUlEKSk7Ci0gICAgICAgIGF1dG8qIGVuZCA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dHlwZW5hbWUgT3A6Ok1ldGFkYXRhKj4oZ2V0SW1wbChPcDo6b3Bjb2RlSUQgKyAxKSk7
CisgICAgICAgIGF1dG8qIG1ldGFkYXRhID0gYml0d2lzZV9jYXN0PHR5cGVuYW1lIE9wOjpNZXRh
ZGF0YSo+KGdldChPcDo6b3Bjb2RlSUQpKTsKKyAgICAgICAgYXV0byogZW5kID0gYml0d2lzZV9j
YXN0PHR5cGVuYW1lIE9wOjpNZXRhZGF0YSo+KGdldEltcGwoT3A6Om9wY29kZUlEICsgMSkpOwog
ICAgICAgICBmb3IgKDsgbWV0YWRhdGEgKyAxIDw9IGVuZDsgKyttZXRhZGF0YSkKICAgICAgICAg
ICAgIGZ1bmMoKm1ldGFkYXRhKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09TUkV4aXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
U1JFeGl0LmNwcAppbmRleCAxMmIzNGUyZjQxYjg3OTFhZGRmYTBkYTdhNjRhZjk5YjI1MDM4OWZl
Li42ZWE5Nzc2OWMwOWQzMmI5MzZlMDRjODdlODRjOGM4ZGVlZDRhMGE0IDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKQEAgLTgxMSw3ICs4MTEsNyBAQCBzdGF0aWMg
dm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENvbnRleHQmIGNvbnRleHQsIENvZGVCbG9jayog
b3V0ZXJtb3N0QmFzZWxpbgogICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJl
Q2FsbCkKICAgICAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQoaW5saW5lQ2FsbEZyYW1lLT5zdGFj
a09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgSlNWYWx1ZShpbmxpbmVDYWxsRnJhbWUt
PmNhbGxlZUNvbnN0YW50KCkpKTsKICNlbHNlIC8vIFVTRShKU1ZBTFVFNjQpIC8vIHNvIHRoaXMg
aXMgdGhlIDMyLWJpdCBwYXJ0Ci0gICAgICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9ICZi
YXNlbGluZUNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKClbY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRl
eF07CisgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IGJhc2VsaW5lQ29k
ZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KS5wdHIo
KTsKICAgICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChpbnN0cnVj
dGlvbikuYml0cygpOwogICAgICAgICBmcmFtZS5zZXRPcGVyYW5kPHVpbnQzMl90PihpbmxpbmVD
YWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCwgVGFn
T2Zmc2V0LCBsb2NhdGlvbkJpdHMpOwogICAgICAgICBmcmFtZS5zZXRPcGVyYW5kPHVpbnQzMl90
PihpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCBU
YWdPZmZzZXQsIHN0YXRpY19jYXN0PHVpbnQzMl90PihKU1ZhbHVlOjpDZWxsVGFnKSk7CkBAIC04
MjUsNyArODI1LDcgQEAgc3RhdGljIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDb250ZXh0
JiBjb250ZXh0LCBDb2RlQmxvY2sqIG91dGVybW9zdEJhc2VsaW4KICNpZiBVU0UoSlNWQUxVRTY0
KQogICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGNvZGVPcmln
aW4tPmJ5dGVjb2RlSW5kZXgpLmJpdHMoKTsKICNlbHNlCi0gICAgICAgIEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbiA9ICZvdXRlcm1vc3RCYXNlbGluZUNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKClb
Y29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleF07CisgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbiA9IG91dGVybW9zdEJhc2VsaW5lQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5h
dChjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KS5wdHIoKTsKICAgICAgICAgdWludDMyX3QgbG9j
YXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChpbnN0cnVjdGlvbikuYml0cygpOwogI2VuZGlmCiAg
ICAgICAgIGZyYW1lLnNldE9wZXJhbmQ8dWludDMyX3Q+KENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50
Q291bnQsIFRhZ09mZnNldCwgbG9jYXRpb25CaXRzKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAppbmRleCAxMTFlYmQz
MmIwN2JjOThjNjAxNTQ4YWZhOWZiMjc3ZDNmYWM0MGU3Li5jMWFiODQ2OGE1MGNiYzUzMWUyYmY5
M2JiNzRiMTE1NmRhMmU5NDIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCkBAIC0yMzcsNyArMjM3LDcgQEAgdm9p
ZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBPU1JFeGl0
QmFzZSYgZXhpdCkKICAgICAgICAgICAgIGppdC5zdG9yZTY0KEFzc2VtYmx5SGVscGVyczo6VHJ1
c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVl
Q29uc3RhbnQoKSkpKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0
ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUp
KSk7CiAjZWxzZSAvLyBVU0UoSlNWQUxVRTY0KSAvLyBzbyB0aGlzIGlzIHRoZSAzMi1iaXQgcGFy
dAogICAgICAgICBqaXQuc3RvcmVQdHIoY2FsbGVyRnJhbWVHUFIsIEFzc2VtYmx5SGVscGVyczo6
YWRkcmVzc0ZvckJ5dGVPZmZzZXQoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXJGcmFtZU9mZnNldCgp
KSk7Ci0gICAgICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9ICZiYXNlbGluZUNvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25zKClbY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleF07CisgICAgICAgIGNv
bnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IGJhc2VsaW5lQ29kZUJsb2NrLT5pbnN0cnVj
dGlvbnMoKS5hdChjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KS5wdHIoKTsKICAgICAgICAgdWlu
dDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChpbnN0cnVjdGlvbikuYml0cygpOwog
ICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihsb2NhdGlv
bkJpdHMpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVD
YWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3VudCkpKTsK
ICAgICAgICAgaml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoSlNWYWx1
ZTo6Q2VsbFRhZyksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlu
bGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUpKSk7CkBA
IC0yNTEsNyArMjUxLDcgQEAgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVy
cyYgaml0LCBjb25zdCBPU1JFeGl0QmFzZSYgZXhpdCkKICNpZiBVU0UoSlNWQUxVRTY0KQogICAg
ICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGNvZGVPcmlnaW4tPmJ5
dGVjb2RlSW5kZXgpLmJpdHMoKTsKICNlbHNlCi0gICAgICAgIEluc3RydWN0aW9uKiBpbnN0cnVj
dGlvbiA9ICZqaXQuYmFzZWxpbmVDb2RlQmxvY2soKS0+aW5zdHJ1Y3Rpb25zKClbY29kZU9yaWdp
bi0+Ynl0ZWNvZGVJbmRleF07CisgICAgICAgIGNvbnN0IEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biA9IGppdC5iYXNlbGluZUNvZGVCbG9jaygpLT5pbnN0cnVjdGlvbnMoKS5hdChjb2RlT3JpZ2lu
LT5ieXRlY29kZUluZGV4KS5wdHIoKTsKICAgICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0g
Q2FsbFNpdGVJbmRleChpbnN0cnVjdGlvbikuYml0cygpOwogI2VuZGlmCiAgICAgICAgIGppdC5z
dG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIEFzc2Vt
Ymx5SGVscGVyczo6dGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnQpKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9y
L0FyZ3VtZW50LnJiIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9Bcmd1bWVudC5y
YgppbmRleCBmNWRkZjUwNWM0MTQ1YjFiN2JkZjI0YzcxOWUzNjg5ZWZmYjVjMTI0Li5lNjlmOGFi
NGFhYWI3YmJlMWQ0ZTI4N2JlZTk0MDU2NjM2MjE1YjY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZ2VuZXJhdG9yL0FyZ3VtZW50LnJiCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9nZW5lcmF0b3IvQXJndW1lbnQucmIKQEAgLTc0LDcgKzc0LDcgQEAgY2xhc3MgQXJndW1l
bnQKICAgICAgICAgewogICAgICAgICAgICAgaWYgKCEje0ZpdHM6OmNoZWNrICJzaXplIiwgInZh
bHVlIiwgQHR5cGV9KQogICAgICAgICAgICAgICAgIHZhbHVlID0gZnVuYygpOwotICAgICAgICAg
ICAgYXV0byogc3RyZWFtID0gcmVpbnRlcnByZXRfY2FzdDx0eXBlbmFtZSBUeXBlQnlTaXplPHNp
emU+Ojp0eXBlKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4odGhpcykgKyAje0BpbmRleH0g
KiBzaXplICsgUGFkZGluZ0J5U2l6ZTxzaXplPjo6dmFsdWUpOworICAgICAgICAgICAgYXV0byog
c3RyZWFtID0gYml0d2lzZV9jYXN0PHR5cGVuYW1lIFR5cGVCeVNpemU8c2l6ZT46OnR5cGUqPihy
ZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPih0aGlzKSArICN7QGluZGV4fSAqIHNpemUgKyBQYWRk
aW5nQnlTaXplPHNpemU+Ojp2YWx1ZSk7CiAgICAgICAgICAgICAqc3RyZWFtID0gI3tGaXRzOjpj
b252ZXJ0ICJzaXplIiwgInZhbHVlIiwgQHR5cGV9OwogICAgICAgICB9CiAgICAgICAgIEVPRgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9PcGNvZGUucmIgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL09wY29kZS5yYgppbmRleCBiMGE0ZTBhNDJl
NTk3OTAzMzczZTA5YTU5N2NlMWViMWYzYzkxYWNkLi5lYWUwMGM1NzZkMWQ4MThlYzYzMWVkOWQx
ZjhjZmI4YjMyZTUyZWE5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJh
dG9yL09wY29kZS5yYgorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL09wY29k
ZS5yYgpAQCAtMTkyLDcgKzE5Miw3IEBAIGNsYXNzIE9wY29kZQogICAgICAgICAgICAgaWYgKCpz
dHJlYW0gIT0gb3Bfd2lkZSkKICAgICAgICAgICAgICAgICByZXR1cm4geyBzdHJlYW0gfTsKIAot
ICAgICAgICAgICAgYXV0byB3aWRlU3RyZWFtID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50
MzJfdCo+KHN0cmVhbSArIDEpOworICAgICAgICAgICAgYXV0byB3aWRlU3RyZWFtID0gYml0d2lz
ZV9jYXN0PGNvbnN0IHVpbnQzMl90Kj4oc3RyZWFtICsgMSk7CiAgICAgICAgICAgICByZXR1cm4g
eyB3aWRlU3RyZWFtIH07CiAgICAgICAgIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9HUFJJbmZvLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0dQUkluZm8u
aAppbmRleCBmMTVhZTgzNzViMzQxMzc0NmMxZTM3OTg4N2U4M2ExMzE2NzMyOTQ0Li42ZjZhZGQw
ZWE4MWFhNmUyYTEzODZlMDQ0OTc3NTI3YjczYjE3NDIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0dQUkluZm8uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0dQUkluZm8uaApAQCAtNTI4LDcgKzUyOCw3IEBAIHB1YmxpYzoKIAogI2lmIENQVShBUk0pCiAj
ZGVmaW5lIE5VTUJFUl9PRl9BUkdVTUVOVF9SRUdJU1RFUlMgNHUKLSNkZWZpbmUgTlVNQkVSX09G
X0NBTExFRV9TQVZFU19SRUdJU1RFUlMgMHUKKyNkZWZpbmUgTlVNQkVSX09GX0NBTExFRV9TQVZF
U19SRUdJU1RFUlMgMXUKIAogY2xhc3MgR1BSSW5mbyB7CiBwdWJsaWM6CmRpZmYgLS1naXQgYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuaAppbmRleCA2ZGI0ZDdmNmFkZTNhZWQ0NjA4ZDAyMjM1NjEwZTczZDA1ZDVjZTk3Li4z
OTVmNTM4NmYyOWU5MDQ2NzdkNWIwZjc2MjQ2ZDk0ZmM5YmE2ODczIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmgKQEAgLTQ1Nyw3ICs0NTcsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9p
ZCBjb21waWxlR2V0QnlJZEhvdFBhdGgoY29uc3QgSWRlbnRpZmllciopOwogCiAgICAgICAgIC8v
IEFyaXRobWV0aWMgb3Bjb2RlIGhlbHBlcnMKLSAgICAgICAgdm9pZCBlbWl0QmluYXJ5RG91Ymxl
T3AoT3Bjb2RlSUQsIGludCBkc3QsIGludCBvcDEsIGludCBvcDIsIE9wZXJhbmRUeXBlcywgSnVt
cExpc3QmIG5vdEludDMyT3AxLCBKdW1wTGlzdCYgbm90SW50MzJPcDIsIGJvb2wgb3AxSXNJblJl
Z2lzdGVycyA9IHRydWUsIGJvb2wgb3AySXNJblJlZ2lzdGVycyA9IHRydWUpOworICAgICAgICB0
ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+CisgICAgICAgIHZvaWQgZW1pdEJpbmFyeURvdWJsZU9wKGNv
bnN0IEluc3RydWN0aW9uICosIE9wZXJhbmRUeXBlcywgSnVtcExpc3QmIG5vdEludDMyT3AxLCBK
dW1wTGlzdCYgbm90SW50MzJPcDIsIGJvb2wgb3AxSXNJblJlZ2lzdGVycyA9IHRydWUsIGJvb2wg
b3AySXNJblJlZ2lzdGVycyA9IHRydWUpOwogCiAjZWxzZSAvLyBVU0UoSlNWQUxVRTMyXzY0KQog
ICAgICAgICB2b2lkIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoaW50IHNyYywgUmVnaXN0ZXJJRCBk
c3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGlj
MzJfNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljMzJfNjQu
Y3BwCmluZGV4IGQzZWJkYjY3YzUyMWNiNjk5ZjM3ZTA5ODkyMDdhNGUyMWU3OWNjNTMuLjhiZTc0
NWRmMzIwYmNmNDJlMzA3MWIzMmYyOWEzYmY2OGJiYTQ2YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYzMyXzY0LmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMzMl82NC5jcHAKQEAgLTQxLDExICs0MSwxNyBA
QAogCiBuYW1lc3BhY2UgSlNDIHsKIAotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXAoT3Bj
b2RlSUQgb3Bjb2RlLCBpbnQgb3AxLCBpbnQgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0aW9u
YWxDb25kaXRpb24gY29uZGl0aW9uKQordGVtcGxhdGUgPHR5cGVuYW1lIE9wPgordm9pZCBKSVQ6
OmVtaXRfY29tcGFyZUFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxh
dGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKICAgICBKdW1wTGlzdCBub3RJbnQzMk9wMTsK
ICAgICBKdW1wTGlzdCBub3RJbnQzMk9wMjsKIAorICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVj
dGlvbi0+YXM8T3A+KCk7CisgICAgaW50IG9wMSA9IGJ5dGVjb2RlLmxocy5vZmZzZXQoKTsKKyAg
ICBpbnQgb3AyID0gYnl0ZWNvZGUucmhzLm9mZnNldCgpOworICAgIHVuc2lnbmVkIHRhcmdldCA9
IGp1bXBUYXJnZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLnRhcmdldCk7CisKICAgICAvLyBDaGFy
YWN0ZXIgbGVzcy4KICAgICBpZiAoaXNPcGVyYW5kQ29uc3RhbnRDaGFyKG9wMSkpIHsKICAgICAg
ICAgZW1pdExvYWQob3AyLCByZWdUMSwgcmVnVDApOwpAQCAtODgsMTIgKzk0LDE4IEBAIHZvaWQg
SklUOjplbWl0X2NvbXBhcmVBbmRKdW1wKE9wY29kZUlEIG9wY29kZSwgaW50IG9wMSwgaW50IG9w
MiwgdW5zaWduZWQgdGFyZ2V0CiAgICAgSnVtcCBlbmQgPSBqdW1wKCk7CiAKICAgICAvLyBEb3Vi
bGUgbGVzcy4KLSAgICBlbWl0QmluYXJ5RG91YmxlT3Aob3Bjb2RlLCB0YXJnZXQsIG9wMSwgb3Ay
LCBPcGVyYW5kVHlwZXMoKSwgbm90SW50MzJPcDEsIG5vdEludDMyT3AyLCAhaXNPcGVyYW5kQ29u
c3RhbnRJbnQob3AxKSwgaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSB8fCAhaXNPcGVyYW5kQ29u
c3RhbnRJbnQob3AyKSk7CisgICAgZW1pdEJpbmFyeURvdWJsZU9wPE9wPihpbnN0cnVjdGlvbiwg
T3BlcmFuZFR5cGVzKCksIG5vdEludDMyT3AxLCBub3RJbnQzMk9wMiwgIWlzT3BlcmFuZENvbnN0
YW50SW50KG9wMSksIGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkgfHwgIWlzT3BlcmFuZENvbnN0
YW50SW50KG9wMikpOwogICAgIGVuZC5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9j
b21wYXJlVW5zaWduZWRBbmRKdW1wKGludCBvcDEsIGludCBvcDIsIHVuc2lnbmVkIHRhcmdldCwg
UmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Cit2
b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWRBbmRKdW1wKGNvbnN0IEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7CisgICAgYXV0byBi
eXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKKyAgICBpbnQgb3AxID0gYnl0ZWNvZGUu
bGhzLm9mZnNldCgpOworICAgIGludCBvcDIgPSBieXRlY29kZS5yaHMub2Zmc2V0KCk7CisgICAg
dW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUudGFyZ2V0
KTsKKwogICAgIGlmIChpc09wZXJhbmRDb25zdGFudEludChvcDEpKSB7CiAgICAgICAgIGVtaXRM
b2FkKG9wMiwgcmVnVDMsIHJlZ1QyKTsKICAgICAgICAgYWRkSnVtcChicmFuY2gzMihjb21tdXRl
KGNvbmRpdGlvbiksIHJlZ1QyLCBJbW0zMihnZXRDb25zdGFudE9wZXJhbmQob3AxKS5hc0ludDMy
KCkpKSwgdGFyZ2V0KTsKQEAgLTEwNiw5ICsxMTgsMTQgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFy
ZVVuc2lnbmVkQW5kSnVtcChpbnQgb3AxLCBpbnQgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIFJlbGF0
aW8KICAgICB9CiB9CiAKLQotdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkKGludCBkc3Qs
IGludCBvcDEsIGludCBvcDIsIFJlbGF0aW9uYWxDb25kaXRpb24gY29uZGl0aW9uKQordGVtcGxh
dGUgPHR5cGVuYW1lIE9wPgordm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkKGNvbnN0IElu
c3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCiB7
CisgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKKyAgICBpbnQgZHN0
ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOworICAgIGludCBvcDEgPSBieXRlY29kZS5saHMub2Zm
c2V0KCk7CisgICAgaW50IG9wMiA9IGJ5dGVjb2RlLnJocy5vZmZzZXQoKTsKKwogICAgIGlmIChp
c09wZXJhbmRDb25zdGFudEludChvcDEpKSB7CiAgICAgICAgIGVtaXRMb2FkKG9wMiwgcmVnVDMs
IHJlZ1QyKTsKICAgICAgICAgY29tcGFyZTMyKGNvbW11dGUoY29uZGl0aW9uKSwgcmVnVDIsIElt
bTMyKGdldENvbnN0YW50T3BlcmFuZChvcDEpLmFzSW50MzIoKSksIHJlZ1QwKTsKQEAgLTEyMiw4
ICsxMzksMTQgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZVVuc2lnbmVkKGludCBkc3QsIGludCBv
cDEsIGludCBvcDIsIFJlbGF0aW9uYWxDb25kaXRpb24gY28KICAgICBlbWl0U3RvcmVCb29sKGRz
dCwgcmVnVDApOwogfQogCi12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coaW50IG9w
MSwgaW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBEb3VibGVDb25kaXRpb24sIHNpemVfdCAoSklU
X09QRVJBVElPTiAqb3BlcmF0aW9uKShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUpLCBib29sIGludmVydCwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRK
dW1wU2xvdyhjb25zdCBJbnN0cnVjdGlvbiAqaW5zdHJ1Y3Rpb24sIERvdWJsZUNvbmRpdGlvbiwg
c2l6ZV90IChKSVRfT1BFUkFUSU9OICpvcGVyYXRpb24pKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQogeworICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8
T3A+KCk7CisgICAgaW50IG9wMSA9IGJ5dGVjb2RlLmxocy5vZmZzZXQoKTsKKyAgICBpbnQgb3Ay
ID0gYnl0ZWNvZGUucmhzLm9mZnNldCgpOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJn
ZXQoaW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLnRhcmdldCk7CisKICAgICBsaW5rQWxsU2xvd0Nhc2Vz
KGl0ZXIpOwogCiAgICAgZW1pdExvYWQob3AxLCByZWdUMSwgcmVnVDApOwpAQCAtMTMyLDEwICsx
NTUsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KGludCBvcDEsIGludCBv
cDIsIHVuc2lnbmVkIHRhcmdldCwgRG91YmxlQ29uZGkKICAgICBlbWl0SnVtcFNsb3dUb0hvdChi
cmFuY2hUZXN0MzIoaW52ZXJ0ID8gWmVybyA6IE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFy
Z2V0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfdW5zaWduZWQoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX3Vuc2lnbmVkKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaW50IHJlc3VsdCA9IGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IG9wMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQ7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BVbnNpZ25lZD4oKTsKKyAgICBpbnQgcmVzdWx0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwor
ICAgIGludCBvcDEgPSBieXRlY29kZS5vcGVyYW5kLm9mZnNldCgpOwogICAgIAogICAgIGVtaXRM
b2FkKG9wMSwgcmVnVDEsIHJlZ1QwKTsKICAgICAKQEAgLTE0NCw5ICsxNjgsMTAgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfdW5zaWduZWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAg
ICBlbWl0U3RvcmVJbnQzMihyZXN1bHQsIHJlZ1QwLCByZXN1bHQgPT0gb3AxKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRfb3BfaW5jKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lk
IEpJVDo6ZW1pdF9vcF9pbmMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKLSAgICBpbnQgc3JjRHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluYz4oKTsKKyAgICBp
bnQgc3JjRHN0ID0gYnl0ZWNvZGUuc3JjRHN0Lm9mZnNldCgpOwogCiAgICAgZW1pdExvYWQoc3Jj
RHN0LCByZWdUMSwgcmVnVDApOwogCkBAIC0xNTUsOSArMTgwLDEwIEBAIHZvaWQgSklUOjplbWl0
X29wX2luYyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGVtaXRTdG9yZUlu
dDMyKHNyY0RzdCwgcmVnVDAsIHRydWUpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9kZWMoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX2RlYyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGludCBzcmNEc3QgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVjPigpOworICAgIGludCBzcmNEc3QgPSBieXRlY29kZS5z
cmNEc3Qub2Zmc2V0KCk7CiAKICAgICBlbWl0TG9hZChzcmNEc3QsIHJlZ1QxLCByZWdUMCk7CiAK
QEAgLTE2NiwxMCArMTkyLDE3IEBAIHZvaWQgSklUOjplbWl0X29wX2RlYyhJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogICAgIGVtaXRTdG9yZUludDMyKHNyY0RzdCwgcmVnVDAsIHRy
dWUpOwogfQogCi12b2lkIEpJVDo6ZW1pdEJpbmFyeURvdWJsZU9wKE9wY29kZUlEIG9wY29kZUlE
LCBpbnQgZHN0LCBpbnQgb3AxLCBpbnQgb3AyLCBPcGVyYW5kVHlwZXMgdHlwZXMsIEp1bXBMaXN0
JiBub3RJbnQzMk9wMSwgSnVtcExpc3QmIG5vdEludDMyT3AyLCBib29sIG9wMUlzSW5SZWdpc3Rl
cnMsIGJvb2wgb3AySXNJblJlZ2lzdGVycykKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQg
SklUOjplbWl0QmluYXJ5RG91YmxlT3AoY29uc3QgSW5zdHJ1Y3Rpb24gKmluc3RydWN0aW9uLCBP
cGVyYW5kVHlwZXMgdHlwZXMsIEp1bXBMaXN0JiBub3RJbnQzMk9wMSwgSnVtcExpc3QmIG5vdElu
dDMyT3AyLCBib29sIG9wMUlzSW5SZWdpc3RlcnMsIGJvb2wgb3AySXNJblJlZ2lzdGVycykKIHsK
ICAgICBKdW1wTGlzdCBlbmQ7CiAKKyAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFz
PE9wPigpOworICAgIGludCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKKyAgICBpbnQgdGFyZ2V0
ID0ganVtcFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUudGFyZ2V0KTsKKyAgICBpbnQgb3Ax
ID0gYnl0ZWNvZGUubGhzLm9mZnNldCgpOworICAgIGludCBvcDIgPSBieXRlY29kZS5yaHMub2Zm
c2V0KCk7CisKICAgICBpZiAoIW5vdEludDMyT3AxLmVtcHR5KCkpIHsKICAgICAgICAgLy8gRG91
YmxlIGNhc2UgMTogT3AxIGlzIG5vdCBpbnQzMjsgT3AyIGlzIHVua25vd24uCiAgICAgICAgIG5v
dEludDMyT3AxLmxpbmsodGhpcyk7CkBAIC0yMDAsMzUgKzIzMywzNSBAQCB2b2lkIEpJVDo6ZW1p
dEJpbmFyeURvdWJsZU9wKE9wY29kZUlEIG9wY29kZUlELCBpbnQgZHN0LCBpbnQgb3AxLCBpbnQg
b3AyLCBPcGVyYQogICAgICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7CiAgICAgICAgICAgICBjYXNl
IG9wX2psZXNzOgogICAgICAgICAgICAgICAgIGVtaXRMb2FkRG91YmxlKG9wMSwgZnBSZWdUMik7
Ci0gICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlTGVzc1RoYW4sIGZw
UmVnVDIsIGZwUmVnVDApLCBkc3QpOworICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91
YmxlKERvdWJsZUxlc3NUaGFuLCBmcFJlZ1QyLCBmcFJlZ1QwKSwgdGFyZ2V0KTsKICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ugb3Bfamxlc3NlcToKICAgICAgICAgICAg
ICAgICBlbWl0TG9hZERvdWJsZShvcDEsIGZwUmVnVDIpOwotICAgICAgICAgICAgICAgIGFkZEp1
bXAoYnJhbmNoRG91YmxlKERvdWJsZUxlc3NUaGFuT3JFcXVhbCwgZnBSZWdUMiwgZnBSZWdUMCks
IGRzdCk7CisgICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlTGVzc1Ro
YW5PckVxdWFsLCBmcFJlZ1QyLCBmcFJlZ1QwKSwgdGFyZ2V0KTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIGNhc2Ugb3BfamdyZWF0ZXI6CiAgICAgICAgICAgICAgICAgZW1p
dExvYWREb3VibGUob3AxLCBmcFJlZ1QyKTsKLSAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5j
aERvdWJsZShEb3VibGVHcmVhdGVyVGhhbiwgZnBSZWdUMiwgZnBSZWdUMCksIGRzdCk7CisgICAg
ICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlR3JlYXRlclRoYW4sIGZwUmVn
VDIsIGZwUmVnVDApLCB0YXJnZXQpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgY2FzZSBvcF9qZ3JlYXRlcmVxOgogICAgICAgICAgICAgICAgIGVtaXRMb2FkRG91YmxlKG9w
MSwgZnBSZWdUMik7Ci0gICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91Ymxl
R3JlYXRlclRoYW5PckVxdWFsLCBmcFJlZ1QyLCBmcFJlZ1QwKSwgZHN0KTsKKyAgICAgICAgICAg
ICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwsIGZwUmVn
VDIsIGZwUmVnVDApLCB0YXJnZXQpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgY2FzZSBvcF9qbmxlc3M6CiAgICAgICAgICAgICAgICAgZW1pdExvYWREb3VibGUob3AxLCBm
cFJlZ1QyKTsKLSAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShEb3VibGVMZXNz
VGhhbk9yRXF1YWxPclVub3JkZXJlZCwgZnBSZWdUMCwgZnBSZWdUMiksIGRzdCk7CisgICAgICAg
ICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9y
ZGVyZWQsIGZwUmVnVDAsIGZwUmVnVDIpLCB0YXJnZXQpOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgY2FzZSBvcF9qbmxlc3NlcToKICAgICAgICAgICAgICAgICBlbWl0TG9h
ZERvdWJsZShvcDEsIGZwUmVnVDIpOwotICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91
YmxlKERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQsIGZwUmVnVDAsIGZwUmVnVDIpLCBkc3QpOwor
ICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKERvdWJsZUxlc3NUaGFuT3JVbm9y
ZGVyZWQsIGZwUmVnVDAsIGZwUmVnVDIpLCB0YXJnZXQpOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgY2FzZSBvcF9qbmdyZWF0ZXI6CiAgICAgICAgICAgICAgICAgZW1pdExv
YWREb3VibGUob3AxLCBmcFJlZ1QyKTsKLSAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERv
dWJsZShEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCwgZnBSZWdUMCwgZnBSZWdU
MiksIGRzdCk7CisgICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlR3Jl
YXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQsIGZwUmVnVDAsIGZwUmVnVDIpLCB0YXJnZXQpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBvcF9qbmdyZWF0ZXJlcToK
ICAgICAgICAgICAgICAgICBlbWl0TG9hZERvdWJsZShvcDEsIGZwUmVnVDIpOwotICAgICAgICAg
ICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQs
IGZwUmVnVDAsIGZwUmVnVDIpLCBkc3QpOworICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNo
RG91YmxlKERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQsIGZwUmVnVDAsIGZwUmVnVDIpLCB0
YXJnZXQpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgZGVmYXVsdDoKICAg
ICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpAQCAtMjU3LDM1ICsy
OTAsMzUgQEAgdm9pZCBKSVQ6OmVtaXRCaW5hcnlEb3VibGVPcChPcGNvZGVJRCBvcGNvZGVJRCwg
aW50IGRzdCwgaW50IG9wMSwgaW50IG9wMiwgT3BlcmEKICAgICAgICAgc3dpdGNoIChvcGNvZGVJ
RCkgewogICAgICAgICAgICAgY2FzZSBvcF9qbGVzczoKICAgICAgICAgICAgICAgICBlbWl0TG9h
ZERvdWJsZShvcDIsIGZwUmVnVDEpOwotICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91
YmxlKERvdWJsZUxlc3NUaGFuLCBmcFJlZ1QwLCBmcFJlZ1QxKSwgZHN0KTsKKyAgICAgICAgICAg
ICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShEb3VibGVMZXNzVGhhbiwgZnBSZWdUMCwgZnBSZWdU
MSksIHRhcmdldCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIG9w
X2psZXNzZXE6CiAgICAgICAgICAgICAgICAgZW1pdExvYWREb3VibGUob3AyLCBmcFJlZ1QxKTsK
LSAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShEb3VibGVMZXNzVGhhbk9yRXF1
YWwsIGZwUmVnVDAsIGZwUmVnVDEpLCBkc3QpOworICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJh
bmNoRG91YmxlKERvdWJsZUxlc3NUaGFuT3JFcXVhbCwgZnBSZWdUMCwgZnBSZWdUMSksIHRhcmdl
dCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIG9wX2pncmVhdGVy
OgogICAgICAgICAgICAgICAgIGVtaXRMb2FkRG91YmxlKG9wMiwgZnBSZWdUMSk7Ci0gICAgICAg
ICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlR3JlYXRlclRoYW4sIGZwUmVnVDAs
IGZwUmVnVDEpLCBkc3QpOworICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKERv
dWJsZUdyZWF0ZXJUaGFuLCBmcFJlZ1QwLCBmcFJlZ1QxKSwgdGFyZ2V0KTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ugb3BfamdyZWF0ZXJlcToKICAgICAgICAgICAg
ICAgICBlbWl0TG9hZERvdWJsZShvcDIsIGZwUmVnVDEpOwotICAgICAgICAgICAgICAgIGFkZEp1
bXAoYnJhbmNoRG91YmxlKERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbCwgZnBSZWdUMCwgZnBSZWdU
MSksIGRzdCk7CisgICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlR3Jl
YXRlclRoYW5PckVxdWFsLCBmcFJlZ1QwLCBmcFJlZ1QxKSwgdGFyZ2V0KTsKICAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ugb3Bfam5sZXNzOgogICAgICAgICAgICAgICAg
IGVtaXRMb2FkRG91YmxlKG9wMiwgZnBSZWdUMSk7Ci0gICAgICAgICAgICAgICAgYWRkSnVtcChi
cmFuY2hEb3VibGUoRG91YmxlTGVzc1RoYW5PckVxdWFsT3JVbm9yZGVyZWQsIGZwUmVnVDEsIGZw
UmVnVDApLCBkc3QpOworICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKERvdWJs
ZUxlc3NUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBmcFJlZ1QxLCBmcFJlZ1QwKSwgdGFyZ2V0KTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ugb3Bfam5sZXNzZXE6CiAg
ICAgICAgICAgICAgICAgZW1pdExvYWREb3VibGUob3AyLCBmcFJlZ1QxKTsKLSAgICAgICAgICAg
ICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkLCBmcFJl
Z1QxLCBmcFJlZ1QwKSwgZHN0KTsKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJs
ZShEb3VibGVMZXNzVGhhbk9yVW5vcmRlcmVkLCBmcFJlZ1QxLCBmcFJlZ1QwKSwgdGFyZ2V0KTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ugb3Bfam5ncmVhdGVyOgog
ICAgICAgICAgICAgICAgIGVtaXRMb2FkRG91YmxlKG9wMiwgZnBSZWdUMSk7Ci0gICAgICAgICAg
ICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9y
ZGVyZWQsIGZwUmVnVDEsIGZwUmVnVDApLCBkc3QpOworICAgICAgICAgICAgICAgIGFkZEp1bXAo
YnJhbmNoRG91YmxlKERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBmcFJlZ1Qx
LCBmcFJlZ1QwKSwgdGFyZ2V0KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
IGNhc2Ugb3Bfam5ncmVhdGVyZXE6CiAgICAgICAgICAgICAgICAgZW1pdExvYWREb3VibGUob3Ay
LCBmcFJlZ1QxKTsKLSAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShEb3VibGVH
cmVhdGVyVGhhbk9yVW5vcmRlcmVkLCBmcFJlZ1QxLCBmcFJlZ1QwKSwgZHN0KTsKKyAgICAgICAg
ICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShEb3VibGVHcmVhdGVyVGhhbk9yVW5vcmRlcmVk
LCBmcFJlZ1QxLCBmcFJlZ1QwKSwgdGFyZ2V0KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKQEAgLTI5OSwxMiArMzMyLDEzIEBAIHZvaWQgSklUOjplbWl0QmluYXJ5RG91Ymxl
T3AoT3Bjb2RlSUQgb3Bjb2RlSUQsIGludCBkc3QsIGludCBvcDEsIGludCBvcDIsIE9wZXJhCiAK
IC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBCRUdJTjogT1BfTU9EIC0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi12b2lkIEpJVDo6ZW1pdF9vcF9tb2QoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX21vZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogI2lmIENQVShYODYpCi0gICAgaW50
IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IG9wMSA9IGN1
cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgaW50IG9wMiA9IGN1cnJlbnRJbnN0
cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5h
czxPcE1vZD4oKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOworICAgIGlu
dCBvcDEgPSBieXRlY29kZS5saHMub2Zmc2V0KCk7CisgICAgaW50IG9wMiA9IGJ5dGVjb2RlLnJo
cy5vZmZzZXQoKTsKIAogICAgIC8vIE1ha2Ugc3VyZSByZWdpc3RlcnMgYXJlIGNvcnJlY3QgZm9y
IHg4NiBJRElWIGluc3RydWN0aW9ucy4KICAgICBBU1NFUlQocmVnVDAgPT0gWDg2UmVnaXN0ZXJz
OjplYXgpOwpAQCAtMzMzLDcgKzM2Nyw3IEBAIHZvaWQgSklUOjplbWl0X29wX21vZChJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogI2VuZGlmCiB9CiAKLXZvaWQgSklUOjplbWl0U2xv
d19vcF9tb2QoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9tb2QoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKIHsKICNpZiBDUFUoWDg2KQogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAKaW5kZXggYWVm
YWVjY2E3NTYwMTQzZTI0NGRkMzg5MjhmOTA4OTI5OTU3YzY3NS4uZjE2OThlZTMwZTFjMTQ1NWRl
NWQ1NjJiYjNhYzcyOTc1YjRmYzc0MiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRDYWxsMzJfNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q2FsbDMyXzY0LmNwcApAQCAtNDUsMTggKzQ1LDE5IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCi12
b2lkIEpJVDo6ZW1pdFB1dENhbGxSZXN1bHQoSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQordGVt
cGxhdGU8dHlwZW5hbWUgT3A+Cit2b2lkIEpJVDo6ZW1pdFB1dENhbGxSZXN1bHQoY29uc3QgT3Am
IGJ5dGVjb2RlKQogewotICAgIGludCBkc3QgPSBpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0g
ICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOwotICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCBy
ZWdUMCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jaykpOworICAgIGVtaXRTdG9yZShieXRlY29kZS5kc3Qub2Zmc2V0KCksIHJlZ1QxLCBy
ZWdUMCk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX3JldChJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfcmV0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgdW5zaWduZWQgZHN0ID0gY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcFJldD4oKTsKKyAgICBpbnQgdmFsdWUgPSBieXRlY29kZS52YWx1ZS5vZmZzZXQoKTsKIAot
ICAgIGVtaXRMb2FkKGRzdCwgcmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZCh2YWx1ZSwgcmVn
VDEsIHJlZ1QwKTsKIAogICAgIGNoZWNrU3RhY2tQb2ludGVyQWxpZ25tZW50KCk7CiAgICAgZW1p
dFJlc3RvcmVDYWxsZWVTYXZlcygpOwpAQCAtNjQsOTYgKzY1LDEyNSBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9yZXQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICByZXQoKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgY29tcGlsZU9wQ2Fs
bFNsb3dDYXNlKG9wX2NhbGwsIGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0lu
Zm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsPihjdXJyZW50SW5z
dHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF90YWlsX2NhbGwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF90YWlsX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBjb21waWxlT3BDYWxsU2xv
d0Nhc2Uob3BfdGFpbF9jYWxsLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJ
bmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGw+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2NhbGxfZXZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX2NhbGxfZXZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGNvbXBpbGVPcENh
bGxTbG93Q2FzZShvcF9jYWxsX2V2YWwsIGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxs
TGlua0luZm9JbmRleCk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbEV2YWw+KGN1
cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCk7CiB9CiAgCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgY29t
cGlsZU9wQ2FsbFNsb3dDYXNlKG9wX2NhbGxfdmFyYXJncywgY3VycmVudEluc3RydWN0aW9uLCBp
dGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxP
cENhbGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5k
ZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyhJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF92YXJhcmdzKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlKG9wX3RhaWxfY2Fs
bF92YXJhcmdzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgr
Kyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxWYXJhcmdzPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlcikKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2Uob3BfdGFpbF9jYWxs
X2ZvcndhcmRfYXJndW1lbnRzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJ
bmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wVGFpbENhbGxGb3J3YXJk
QXJndW1lbnRzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgr
Kyk7CiB9CiAgICAgCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29uc3RydWN0X3ZhcmFyZ3MoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZShvcF9jb25zdHJ1
Y3RfdmFyYXJncywgY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4
KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENvbnN0cnVjdFZhcmFyZ3M+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KICAgICAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3QoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBjb21waWxl
T3BDYWxsU2xvd0Nhc2Uob3BfY29uc3RydWN0LCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1f
Y2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3Ry
dWN0PihjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9
CiAKLXZvaWQgSklUOjplbWl0X29wX2NhbGwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKK3ZvaWQgSklUOjplbWl0X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKLSAgICBjb21waWxlT3BDYWxsKG9wX2NhbGwsIGN1cnJlbnRJbnN0cnVjdGlv
biwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsPE9wQ2FsbD4oY3Vy
cmVudEluc3RydWN0aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6
ZW1pdF9vcF90YWlsX2NhbGwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQg
SklUOjplbWl0X29wX3RhaWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewotICAgIGNvbXBpbGVPcENhbGwob3BfdGFpbF9jYWxsLCBjdXJyZW50SW5zdHJ1Y3Rp
b24sIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbDxPcFRhaWxDYWxs
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQg
SklUOjplbWl0X29wX2NhbGxfZXZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQor
dm9pZCBKSVQ6OmVtaXRfb3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7Ci0gICAgY29tcGlsZU9wQ2FsbChvcF9jYWxsX2V2YWwsIGN1cnJlbnRJbnN0
cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCk7CisgICAgY29tcGlsZU9wQ2FsbDxPcENhbGxF
dmFsPihjdXJyZW50SW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgpOwogfQogCi12b2lk
IEpJVDo6ZW1pdF9vcF9jYWxsX3ZhcmFyZ3MoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKK3ZvaWQgSklUOjplbWl0X29wX2NhbGxfdmFyYXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewotICAgIGNvbXBpbGVPcENhbGwob3BfY2FsbF92YXJhcmdzLCBj
dXJyZW50SW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9w
Q2FsbDxPcENhbGxWYXJhcmdzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5k
ZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX3RhaWxfY2FsbF92YXJhcmdzKEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF90YWlsX2NhbGxfdmFy
YXJncyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGNvbXBp
bGVPcENhbGwob3BfdGFpbF9jYWxsX3ZhcmFyZ3MsIGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxs
TGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsPE9wVGFpbENhbGxWYXJhcmdzPihj
dXJyZW50SW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklU
OjplbWl0X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1l
bnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgY29tcGls
ZU9wQ2FsbChvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMsIGN1cnJlbnRJbnN0cnVjdGlv
biwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsPE9wVGFpbENhbGxG
b3J3YXJkQXJndW1lbnRzPihjdXJyZW50SW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgr
Kyk7CiB9CiAgICAgCi12b2lkIEpJVDo6ZW1pdF9vcF9jb25zdHJ1Y3RfdmFyYXJncyhJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfY29uc3RydWN0X3Zh
cmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBjb21w
aWxlT3BDYWxsKG9wX2NvbnN0cnVjdF92YXJhcmdzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG1fY2Fs
bExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbDxPcENvbnN0cnVjdFZhcmFyZ3M+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KICAgICAKLXZv
aWQgSklUOjplbWl0X29wX2NvbnN0cnVjdChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQordm9pZCBKSVQ6OmVtaXRfb3BfY29uc3RydWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgY29tcGlsZU9wQ2FsbChvcF9jb25zdHJ1Y3QsIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsPE9w
Q29uc3RydWN0PihjdXJyZW50SW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9
CiAKLXZvaWQgSklUOjpjb21waWxlU2V0dXBWYXJhcmdzRnJhbWUoT3Bjb2RlSUQgb3Bjb2RlLCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIENhbGxMaW5rSW5mbyogaW5mbykKK3RlbXBsYXRlIDx0
eXBlbmFtZSBPcD4KK3N0ZDo6ZW5hYmxlX2lmX3Q8CisgICAgT3A6Om9wY29kZUlEICE9IG9wX2Nh
bGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfY29uc3RydWN0X3ZhcmFyZ3MKKyAgICAm
JiBPcDo6b3Bjb2RlSUQgIT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MgJiYgT3A6Om9wY29kZUlEICE9
IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cworLCB2b2lkPgorSklUOjpjb21waWxlU2V0
dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIENhbGxMaW5rSW5mbyopCiB7Ci0gICAgaW50IHRo
aXNWYWx1ZSA9IGluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICBpbnQgYXJndW1lbnRzID0g
aW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOwotICAgIGludCBmaXJzdEZyZWVSZWdpc3RlciA9IGlu
c3RydWN0aW9uWzVdLnUub3BlcmFuZDsKLSAgICBpbnQgZmlyc3RWYXJBcmdPZmZzZXQgPSBpbnN0
cnVjdGlvbls2XS51Lm9wZXJhbmQ7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7CisgICAgaW50IGFyZ0NvdW50ID0gYnl0ZWNvZGUuYXJnYzsKKyAg
ICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAtc3RhdGljX2Nhc3Q8aW50PihieXRlY29kZS5hcmd2KTsK
KworICAgIGlmIChPcDo6b3Bjb2RlSUQgPT0gb3BfY2FsbCAmJiBzaG91bGRFbWl0UHJvZmlsaW5n
KCkpIHsKKyAgICAgICAgZW1pdExvYWQocmVnaXN0ZXJPZmZzZXQgKyBDYWxsRnJhbWU6OmFyZ3Vt
ZW50T2Zmc2V0SW5jbHVkaW5nVGhpcygwKSwgcmVnVDAsIHJlZ1QxKTsKKyAgICAgICAgSnVtcCBk
b25lID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QwKTsKKyAgICAgICAgbG9hZDMyKEFkZHJlc3MocmVn
VDEsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZzZXQoKSksIHJlZ1QxKTsKKyAgICAgICAgc3RvcmUz
MihyZWdUMSwgbWV0YWRhdGEuYXJyYXlQcm9maWxlLmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJl
SUQoKSk7CisgICAgICAgIGRvbmUubGluayh0aGlzKTsKKyAgICB9CisKKyAgICBhZGRQdHIoVHJ1
c3RlZEltbTMyKHJlZ2lzdGVyT2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVyKSArIHNpemVvZihDYWxs
ZXJGcmFtZUFuZFBDKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7
CisgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoYXJnQ291bnQpLCBBZGRyZXNzKHN0YWNrUG9pbnRl
clJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50ICogc3RhdGljX2Nhc3Q8aW50
PihzaXplb2YoUmVnaXN0ZXIpKSArIFBheWxvYWRPZmZzZXQgLSBzaXplb2YoQ2FsbGVyRnJhbWVB
bmRQQykpKTsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgT3A+CitzdGQ6OmVuYWJsZV9pZl90PAor
ICAgIE9wOjpvcGNvZGVJRCA9PSBvcF9jYWxsX3ZhcmFyZ3MgfHwgT3A6Om9wY29kZUlEID09IG9w
X2NvbnN0cnVjdF92YXJhcmdzCisgICAgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92
YXJhcmdzIHx8IE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMK
Kywgdm9pZD4KK0pJVDo6Y29tcGlsZVNldHVwRnJhbWUoY29uc3QgT3AmIGJ5dGVjb2RlLCBDYWxs
TGlua0luZm8qIGluZm8pCit7CisgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBPcDo6b3Bjb2RlSUQ7
CisgICAgaW50IHRoaXNWYWx1ZSA9IGJ5dGVjb2RlLnRoaXNWYWx1ZS5vZmZzZXQoKTsKKyAgICBp
bnQgYXJndW1lbnRzID0gYnl0ZWNvZGUuYXJndW1lbnRzLm9mZnNldCgpOworICAgIGludCBmaXJz
dEZyZWVSZWdpc3RlciA9IGJ5dGVjb2RlLmZpcnN0RnJlZS5vZmZzZXQoKTsKKyAgICBpbnQgZmly
c3RWYXJBcmdPZmZzZXQgPSBieXRlY29kZS5maXJzdFZhckFyZzsKIAogICAgIGVtaXRMb2FkKGFy
Z3VtZW50cywgcmVnVDEsIHJlZ1QwKTsKICAgICBaX0pJVE9wZXJhdGlvbl9FSlpaIHNpemVPcGVy
YXRpb247Ci0gICAgaWYgKG9wY29kZSA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMp
CisgICAgaWYgKE9wOjpvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMp
CiAgICAgICAgIHNpemVPcGVyYXRpb24gPSBvcGVyYXRpb25TaXplRnJhbWVGb3JGb3J3YXJkQXJn
dW1lbnRzOwogICAgIGVsc2UKICAgICAgICAgc2l6ZU9wZXJhdGlvbiA9IG9wZXJhdGlvblNpemVG
cmFtZUZvclZhcmFyZ3M7CkBAIC0xNjMsNyArMTkzLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVTZXR1
cFZhcmFyZ3NGcmFtZShPcGNvZGVJRCBvcGNvZGUsIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwg
Q2EKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC0oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpICsg
V1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSwgNiAqIHNpemVv
Zih2b2lkKikpKSksIHJlZ1QxLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAgICAgZW1pdExvYWQo
YXJndW1lbnRzLCByZWdUMiwgcmVnVDQpOwogICAgIEZfSklUT3BlcmF0aW9uX0VGSlpaIHNldHVw
T3BlcmF0aW9uOwotICAgIGlmIChvcGNvZGUgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1l
bnRzKQorICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMp
CiAgICAgICAgIHNldHVwT3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0dXBGb3J3YXJkQXJndW1lbnRz
RnJhbWU7CiAgICAgZWxzZQogICAgICAgICBzZXR1cE9wZXJhdGlvbiA9IG9wZXJhdGlvblNldHVw
VmFyYXJnc0ZyYW1lOwpAQCAtMTg1LDcgKzIxNSwxNCBAQCB2b2lkIEpJVDo6Y29tcGlsZVNldHVw
VmFyYXJnc0ZyYW1lKE9wY29kZUlEIG9wY29kZSwgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBD
YQogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSwgcmVn
VDEsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIH0KIAotdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZh
bChJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCit0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KK2Jvb2wg
SklUOjpjb21waWxlQ2FsbEV2YWwoY29uc3QgT3AmKQoreworICAgIHJldHVybiBmYWxzZTsKK30K
KwordGVtcGxhdGU8PgorYm9vbCBKSVQ6OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcENhbGxFdmFs
JiBieXRlY29kZSkKIHsKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKC1zdGF0aWNfY2FzdDxwdHJk
aWZmX3Q+KHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlciwg
cmVnVDEpOwogICAgIHN0b3JlUHRyKGNhbGxGcmFtZVJlZ2lzdGVyLCBBZGRyZXNzKHJlZ1QxLCBD
YWxsRnJhbWU6OmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKQEAgLTE5OCwxOCArMjM1LDIxIEBAIHZv
aWQgSklUOjpjb21waWxlQ2FsbEV2YWwoSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQogCiAgICAg
c2FtcGxlQ29kZUJsb2NrKG1fY29kZUJsb2NrKTsKICAgICAKLSAgICBlbWl0UHV0Q2FsbFJlc3Vs
dChpbnN0cnVjdGlvbik7CisgICAgZW1pdFB1dENhbGxSZXN1bHQoYnl0ZWNvZGUpOworCisgICAg
cmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24q
IGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewog
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKKyAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1
Y3Rpb24tPmFzPE9wQ2FsbEV2YWw+KCk7CiAgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9jb2Rl
QmxvY2stPmFkZENhbGxMaW5rSW5mbygpOwogICAgIGluZm8tPnNldFVwQ2FsbChDYWxsTGlua0lu
Zm86OkNhbGwsIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIHJlZ1QwKTsKIAotICAgIGlu
dCByZWdpc3Rlck9mZnNldCA9IC1pbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7Ci0gICAgaW50IGNh
bGxlZSA9IGluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBpbnQgcmVnaXN0ZXJPZmZzZXQg
PSAtYnl0ZWNvZGUuYXJndjsKKyAgICBpbnQgY2FsbGVlID0gYnl0ZWNvZGUuY2FsbGVlLm9mZnNl
dCgpOwogCiAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihyZWdpc3Rlck9mZnNldCAqIHNpemVvZihS
ZWdpc3RlcikgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBjYWxsRnJhbWVSZWdpc3Rlciwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCkBAIC0yMjAsMTIgKzI2MCwxNSBAQCB2b2lkIEpJVDo6
Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeQogCiAgICAgc2FtcGxlQ29kZUJsb2NrKG1fY29kZUJsb2NrKTsKICAgICAK
LSAgICBlbWl0UHV0Q2FsbFJlc3VsdChpbnN0cnVjdGlvbik7CisgICAgZW1pdFB1dENhbGxSZXN1
bHQoYnl0ZWNvZGUpOwogfQogCi12b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNv
ZGVJRCwgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRl
eCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjpjb21waWxlT3BDYWxsKGNvbnN0
IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpCiB7
Ci0gICAgaW50IGNhbGxlZSA9IGluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBPcGNvZGVJ
RCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rp
b24tPmFzPE9wPigpOworICAgIGludCBjYWxsZWUgPSBieXRlY29kZS5jYWxsZWUub2Zmc2V0KCk7
CiAKICAgICAvKiBDYWxsZXIgYWx3YXlzOgogICAgICAgICAtIFVwZGF0ZXMgY2FsbEZyYW1lUmVn
aXN0ZXIgdG8gY2FsbGVlIGNhbGxGcmFtZS4KQEAgLTI0MiwyNCArMjg1LDggQEAgdm9pZCBKSVQ6
OmNvbXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2RlSUQsIEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgdW5zaWduZWQgY2EKICAgICBDYWxsTGlua0luZm8qIGluZm8gPSBudWxscHRyOwogICAgIGlm
IChvcGNvZGVJRCAhPSBvcF9jYWxsX2V2YWwpCiAgICAgICAgIGluZm8gPSBtX2NvZGVCbG9jay0+
YWRkQ2FsbExpbmtJbmZvKCk7Ci0gICAgaWYgKG9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8
fCBvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3RfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWls
X2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVu
dHMpCi0gICAgICAgIGNvbXBpbGVTZXR1cFZhcmFyZ3NGcmFtZShvcGNvZGVJRCwgaW5zdHJ1Y3Rp
b24sIGluZm8pOwotICAgIGVsc2UgewotICAgICAgICBpbnQgYXJnQ291bnQgPSBpbnN0cnVjdGlv
blszXS51Lm9wZXJhbmQ7Ci0gICAgICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1pbnN0cnVjdGlv
bls0XS51Lm9wZXJhbmQ7Ci0gICAgICAgIAotICAgICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfY2Fs
bCAmJiBzaG91bGRFbWl0UHJvZmlsaW5nKCkpIHsKLSAgICAgICAgICAgIGVtaXRMb2FkKHJlZ2lz
dGVyT2Zmc2V0ICsgQ2FsbEZyYW1lOjphcmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoMCksIHJl
Z1QwLCByZWdUMSk7Ci0gICAgICAgICAgICBKdW1wIGRvbmUgPSBicmFuY2hJZk5vdENlbGwocmVn
VDApOwotICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCBKU0NlbGw6OnN0cnVjdHVy
ZUlET2Zmc2V0KCkpLCByZWdUMSk7Ci0gICAgICAgICAgICBzdG9yZVB0cihyZWdUMSwgYXJyYXlQ
cm9maWxlRm9yPE9wQ2FsbFNoYXBlPihpbnN0cnVjdGlvbiktPmFkZHJlc3NPZkxhc3RTZWVuU3Ry
dWN0dXJlSUQoKSk7Ci0gICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7Ci0gICAgICAgIH0KLSAg
ICAKLSAgICAgICAgYWRkUHRyKFRydXN0ZWRJbW0zMihyZWdpc3Rlck9mZnNldCAqIHNpemVvZihS
ZWdpc3RlcikgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCBjYWxsRnJhbWVSZWdpc3Rlciwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotCi0gICAgICAgIHN0b3JlMzIoVHJ1c3RlZEltbTMyKGFy
Z0NvdW50KSwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3RlciwgQ2FsbEZyYW1lU2xvdDo6YXJn
dW1lbnRDb3VudCAqIHN0YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBQYXlsb2Fk
T2Zmc2V0IC0gc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSk7Ci0gICAgfSAvLyBTUCBob2xkcyBu
ZXdDYWxsRnJhbWUgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyksIHdpdGggQXJndW1lbnRDb3Vu
dCBpbml0aWFsaXplZC4KKyAgICBjb21waWxlU2V0dXBGcmFtZShieXRlY29kZSwgaW5mbyk7Cisg
ICAgLy8gU1AgaG9sZHMgbmV3Q2FsbEZyYW1lICsgc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpLCB3
aXRoIEFyZ3VtZW50Q291bnQgaW5pdGlhbGl6ZWQuCiAgICAgCiAgICAgdWludDMyX3QgbG9jYXRp
b25CaXRzID0gQ2FsbFNpdGVJbmRleChpbnN0cnVjdGlvbikuYml0cygpOwogICAgIHN0b3JlMzIo
VHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIHRhZ0ZvcihDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50KSk7CkBAIC0yNjgsOCArMjk1LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoT3Bj
b2RlSUQgb3Bjb2RlSUQsIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgdW5zaWduZWQgY2EKICAg
ICBzdG9yZTMyKHJlZ1QwLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBDYWxsRnJhbWVT
bG90OjpjYWxsZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9h
ZE9mZnNldCAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOwogICAgIHN0b3JlMzIocmVnVDEs
IEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0
YXRpY19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBUYWdPZmZzZXQgLSBzaXplb2YoQ2Fs
bGVyRnJhbWVBbmRQQykpKTsKIAotICAgIGlmIChvcGNvZGVJRCA9PSBvcF9jYWxsX2V2YWwpIHsK
LSAgICAgICAgY29tcGlsZUNhbGxFdmFsKGluc3RydWN0aW9uKTsKKyAgICBpZiAoY29tcGlsZUNh
bGxFdmFsKGJ5dGVjb2RlKSkgewogICAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0zMDIsMTEg
KzMyOCwxNCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJRCwgSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uLCB1bnNpZ25lZCBjYQogICAgIGNoZWNrU3RhY2tQb2ludGVy
QWxpZ25tZW50KCk7CiAKICAgICBzYW1wbGVDb2RlQmxvY2sobV9jb2RlQmxvY2spOwotICAgIGVt
aXRQdXRDYWxsUmVzdWx0KGluc3RydWN0aW9uKTsKKyAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRl
Y29kZSk7CiB9CiAKLXZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoT3Bjb2RlSUQgb3Bj
b2RlSUQsIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYgaXRlciwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgT3A+Cit2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKGNvbnN0IEluc3RydWN0
aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwg
dW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpCiB7CisgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBP
cDo6b3Bjb2RlSUQ7CisKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfY2FsbF9ldmFsKSB7CiAgICAg
ICAgIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGluc3RydWN0aW9uLCBpdGVyKTsKICAgICAgICAg
cmV0dXJuOwpAQCAtMzE2LDcgKzM0NSw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nh
c2UoT3Bjb2RlSUQgb3Bjb2RlSUQsIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjCiAKICAg
ICBtb3ZlKFRydXN0ZWRJbW1QdHIobV9jYWxsQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0lu
ZGV4XS5jYWxsTGlua0luZm8pLCByZWdUMik7CiAKLSAgICBpZiAob3Bjb2RlSUQgPT0gb3BfdGFp
bF9jYWxsIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92YXJhcmdzKQorICAgIGlmIChvcGNv
ZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3Mg
fHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKQogICAgICAgICBl
bWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAKICAgICBtX2NhbGxDb21waWxhdGlvbkluZm9bY2Fs
bExpbmtJbmZvSW5kZXhdLmNhbGxSZXR1cm5Mb2NhdGlvbiA9IGVtaXROYWtlZENhbGwobV92bS0+
Z2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJUYWc+
KCkpOwpAQCAtMzMwLDcgKzM1OSw5IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2Uo
T3Bjb2RlSUQgb3Bjb2RlSUQsIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjCiAgICAgY2hl
Y2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAogICAgIHNhbXBsZUNvZGVCbG9jayhtX2NvZGVC
bG9jayk7Ci0gICAgZW1pdFB1dENhbGxSZXN1bHQoaW5zdHJ1Y3Rpb24pOworCisgICAgYXV0byBi
eXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsKKyAgICBlbWl0UHV0Q2FsbFJlc3VsdChi
eXRlY29kZSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVzLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVElubGluZXMuaAppbmRleCA2ODk3NzA5ZWE5MWYwMmI1YTUyNTAyY2I5NWE4MWY2YWIyNGY5
ZTExLi5kNmM3YjdmYTc4OGNjMzY4Mjc4Y2VkYzYxMzQ3ZWFkNmQzMDFiMTI5IDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVElubGluZXMuaApAQCAtMjYsNyArMjYsNiBAQAogI3ByYWdtYSBv
bmNlCiAKICNpZiBFTkFCTEUoSklUKQotCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogCiBuYW1l
c3BhY2UgSlNDIHsKQEAgLTEzMSw3ICsxMzAsNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjp1
cGRhdGVUb3BDYWxsRnJhbWUoKQogewogICAgIEFTU0VSVChzdGF0aWNfY2FzdDxpbnQ+KG1fYnl0
ZWNvZGVPZmZzZXQpID49IDApOwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCi0gICAgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uID0gJm1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKVttX2J5dGVjb2Rl
T2Zmc2V0XTsgCisgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gbV9jb2RlQmxv
Y2stPmluc3RydWN0aW9ucygpLmF0KG1fYnl0ZWNvZGVPZmZzZXQpLnB0cigpOwogICAgIHVpbnQz
Ml90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoaW5zdHJ1Y3Rpb24pLmJpdHMoKTsKICNl
bHNlCiAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChtX2J5dGVjb2Rl
T2Zmc2V0KS5iaXRzKCk7CkBAIC03MDYsNiArNzA1LDggQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6ZW1pdEp1bXBTbG93Q2FzZUlmTm90TnVtYmVyKFJlZ2lzdGVySUQgcmVnKQogICAgIGFkZFNs
b3dDYXNlKGJyYW5jaElmTm90TnVtYmVyKHJlZykpOwogfQogCisjZW5kaWYgLy8gVVNFKEpTVkFM
VUUzMl82NCkKKwogQUxXQVlTX0lOTElORSBpbnQgSklUOjpqdW1wVGFyZ2V0KGNvbnN0IEluc3Ry
dWN0aW9uKiBpbnN0cnVjdGlvbiwgaW50IHRhcmdldCkKIHsKICAgICBpZiAodGFyZ2V0KQpAQCAt
NzM2LDggKzczNyw2IEBAIEFMV0FZU19JTkxJTkUgQXJpdGhQcm9maWxlIEpJVDo6Y29waWVkQXJp
dGhQcm9maWxlKEJpbmFyeU9wIGJ5dGVjb2RlKQogICAgIHJldHVybiBhcml0aFByb2ZpbGU7CiB9
CiAKLSNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQotCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAog
I2VuZGlmIC8vIEVOQUJMRShKSVQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wY29kZXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVz
LmNwcAppbmRleCBmNDI3MGJlOGM1YTQxYTY4MjQxMWRiNTQwZmM0NGQ3YjMxOTI3MDJmLi44MDFh
NmE4MjIxNTI3ZDhhODJmMmUzNTFlYzE4MTgzOTVkNzM2NjBmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKQEAgLTEwMTYsNiArMTAxNiw3IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9sb29wX2hpbnQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsCiAgICAgICAgIGVtaXRKdW1wU2xvd1RvSG90KGp1bXAoKSwgY3VycmVudElu
c3RydWN0aW9uLT5zaXplKCkpOwogICAgIH0KICNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGN1cnJl
bnRJbnN0cnVjdGlvbik7CiAgICAgVU5VU0VEX1BBUkFNKGl0ZXIpOwogI2VuZGlmCiB9CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82NC5jcHAKaW5kZXggZWYwMzEw
MmVjNjEwOTZmOTJmNjU3MTYwNDY2YTZlY2M3OTI1N2JhZC4uODdjMWZhMDcyOWUxMGEyYjhkZWU0
YTU1NzMyYWQ0MGE0NDY0MThhZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzMzJfNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3Bjb2RlczMyXzY0LmNwcApAQCAtNDcsMTAgKzQ3LDExIEBACiAKIG5hbWVzcGFjZSBKU0Mgewog
Ci12b2lkIEpJVDo6ZW1pdF9vcF9tb3YoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
K3ZvaWQgSklUOjplbWl0X29wX21vdihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwot
ICAgIGludCBzcmMgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTW92PigpOworICAgIGludCBkc3Qg
PSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7CisgICAgaW50IHNyYyA9IGJ5dGVjb2RlLnNyYy5vZmZz
ZXQoKTsKICAgICAKICAgICBpZiAobV9jb2RlQmxvY2stPmlzQ29uc3RhbnRSZWdpc3RlckluZGV4
KHNyYykpCiAgICAgICAgIGVtaXRTdG9yZShkc3QsIGdldENvbnN0YW50T3BlcmFuZChzcmMpKTsK
QEAgLTYwLDI0ICs2MSwyOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9tb3YoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKICAgICB9CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2VuZChJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfZW5kKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgQVNTRVJUKHJldHVyblZh
bHVlR1BSICE9IGNhbGxGcmFtZVJlZ2lzdGVyKTsKLSAgICBlbWl0TG9hZChjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kLCByZWdUMSwgcmV0dXJuVmFsdWVHUFIpOworICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW5kPigpOworICAgIGVtaXRMb2FkKGJ5
dGVjb2RlLnZhbHVlLm9mZnNldCgpLCByZWdUMSwgcmV0dXJuVmFsdWVHUFIpOwogICAgIGVtaXRS
ZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICBlbWl0RnVuY3Rpb25FcGlsb2d1ZSgpOwogICAgIHJl
dCgpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9qbXAoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX2ptcChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewotICAgIHVuc2lnbmVkIHRhcmdldCA9IGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQ7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BKbXA+KCk7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5z
dHJ1Y3Rpb24sIGJ5dGVjb2RlLnRhcmdldCk7CiAgICAgYWRkSnVtcChqdW1wKCksIHRhcmdldCk7
CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX25ld19vYmplY3QoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGN1
cnJlbnRJbnN0cnVjdGlvblszXS51Lm9iamVjdEFsbG9jYXRpb25Qcm9maWxlLT5zdHJ1Y3R1cmUo
KTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVj
dD4oKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1ldGFkYXRhLm9iamVjdEFsbG9jYXRpb25Q
cm9maWxlLnN0cnVjdHVyZSgpOwogICAgIHNpemVfdCBhbGxvY2F0aW9uU2l6ZSA9IEpTRmluYWxP
YmplY3Q6OmFsbG9jYXRpb25TaXplKHN0cnVjdHVyZS0+aW5saW5lQ2FwYWNpdHkoKSk7CiAgICAg
QWxsb2NhdG9yIGFsbG9jYXRvciA9IHN1YnNwYWNlRm9yPEpTRmluYWxPYmplY3Q+KCptX3ZtKS0+
YWxsb2NhdG9yRm9yTm9uVmlydHVhbChhbGxvY2F0aW9uU2l6ZSwgQWxsb2NhdG9yRm9yTW9kZTo6
QWxsb2NhdG9ySWZFeGlzdHMpOwogCkBAIC05MywyNiArOTgsMjggQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfbmV3X29iamVjdChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgICAgICBl
bWl0QWxsb2NhdGVKU09iamVjdChyZXN1bHRSZWcsIEpJVEFsbG9jYXRvcjo6Y29uc3RhbnQoYWxs
b2NhdG9yKSwgYWxsb2NhdG9yUmVnLCBUcnVzdGVkSW1tUHRyKHN0cnVjdHVyZSksIGJ1dHRlcmZs
eSwgc2NyYXRjaFJlZywgc2xvd0Nhc2VzKTsKICAgICAgICAgZW1pdEluaXRpYWxpemVJbmxpbmVT
dG9yYWdlKHJlc3VsdFJlZywgc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKICAgICAgICAg
YWRkU2xvd0Nhc2Uoc2xvd0Nhc2VzKTsKLSAgICAgICAgZW1pdFN0b3JlQ2VsbChjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZXN1bHRSZWcpOworICAgICAgICBlbWl0U3RvcmVDZWxs
KGJ5dGVjb2RlLmRzdC5vZmZzZXQoKSwgcmVzdWx0UmVnKTsKICAgICB9CiB9CiAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF9uZXdfb2JqZWN0KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CiAKLSAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZDsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51
Lm9iamVjdEFsbG9jYXRpb25Qcm9maWxlLT5zdHJ1Y3R1cmUoKTsKKyAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5ld09iamVjdD4oKTsKKyAgICBhdXRvJiBtZXRh
ZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBpbnQgZHN0ID0gYnl0
ZWNvZGUuZHN0Lm9mZnNldCgpOworICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEu
b2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJlKCk7CiAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25OZXdPYmplY3QsIHN0cnVjdHVyZSk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJl
dHVyblZhbHVlR1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19pbnN0
YW5jZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3Bf
b3ZlcnJpZGVzX2hhc19pbnN0YW5jZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewotICAgIGF1dG8mIGJ5dGVjb2RlID0gKnJlaW50ZXJwcmV0X2Nhc3Q8T3BPdmVycmlk
ZXNIYXNJbnN0YW5jZSo+KGN1cnJlbnRJbnN0cnVjdGlvbik7Ci0gICAgaW50IGRzdCA9IGJ5dGVj
b2RlLmRzdCgpOwotICAgIGludCBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLmNvbnN0cnVjdG9yKCk7
Ci0gICAgaW50IGhhc0luc3RhbmNlVmFsdWUgPSBieXRlY29kZS5oYXNJbnN0YW5jZVZhbHVlKCk7
CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BPdmVycmlkZXNI
YXNJbnN0YW5jZT4oKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOworICAg
IGludCBjb25zdHJ1Y3RvciA9IGJ5dGVjb2RlLmNvbnN0cnVjdG9yLm9mZnNldCgpOworICAgIGlu
dCBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUuaGFzSW5zdGFuY2VWYWx1ZS5vZmZzZXQoKTsK
IAogICAgIGVtaXRMb2FkUGF5bG9hZChoYXNJbnN0YW5jZVZhbHVlLCByZWdUMCk7CiAgICAgLy8g
V2UgZG9uJ3QganVtcCBpZiB3ZSBrbm93IHdoYXQgU3ltYm9sLmhhc0luc3RhbmNlIHdvdWxkIGRv
LgpAQCAtMTM1LDEyICsxNDIsMTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfb3ZlcnJpZGVzX2hhc19p
bnN0YW5jZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogCiB9CiAKLXZvaWQgSklU
OjplbWl0X29wX2luc3RhbmNlb2YoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3Zv
aWQgSklUOjplbWl0X29wX2luc3RhbmNlb2YoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKLSAgICBhdXRvJiBieXRlY29kZSA9ICpyZWludGVycHJldF9jYXN0PE9wSW5z
dGFuY2VvZio+KGN1cnJlbnRJbnN0cnVjdGlvbik7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRz
dCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLnZhbHVlKCk7Ci0gICAgaW50IHByb3RvID0g
Ynl0ZWNvZGUucHJvdG90eXBlKCk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BJbnN0YW5jZW9mPigpOworICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zm
c2V0KCk7CisgICAgaW50IHZhbHVlID0gYnl0ZWNvZGUudmFsdWUub2Zmc2V0KCk7CisgICAgaW50
IHByb3RvID0gYnl0ZWNvZGUucHJvdG90eXBlLm9mZnNldCgpOwogCiAgICAgLy8gTG9hZCB0aGUg
b3BlcmFuZHMgaW50byByZWdpc3RlcnMuCiAgICAgLy8gV2UgdXNlIHJlZ1QwIGZvciBiYXNlVmFs
IHNpbmNlIHdlIHdpbGwgYmUgZG9uZSB3aXRoIHRoaXMgZmlyc3QsIGFuZCB3ZSBjYW4gdGhlbiB1
c2UgaXQgZm9yIHRoZSByZXN1bHQuCkBAIC0xNjQsMjAgKzE3MSwyMCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9pbnN0YW5jZW9mKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1p
dFN0b3JlQm9vbChkc3QsIHJlZ1QwKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2Vv
Zl9jdXN0b20oSW5zdHJ1Y3Rpb24qKQordm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZl9jdXN0
b20oY29uc3QgSW5zdHJ1Y3Rpb24qKQogewogICAgIC8vIFRoaXMgYWx3YXlzIGdvZXMgdG8gc2xv
dyBwYXRoIHNpbmNlIHdlIGV4cGVjdCBpdCB0byBiZSByYXJlLgogICAgIGFkZFNsb3dDYXNlKGp1
bXAoKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQogewogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAgICAgCi0gICAgYXV0byYgYnl0ZWNv
ZGUgPSAqcmVpbnRlcnByZXRfY2FzdDxPcEluc3RhbmNlb2YqPihjdXJyZW50SW5zdHJ1Y3Rpb24p
OwotICAgIGludCBkc3QgPSBieXRlY29kZS5kc3QoKTsKLSAgICBpbnQgdmFsdWUgPSBieXRlY29k
ZS52YWx1ZSgpOwotICAgIGludCBwcm90byA9IGJ5dGVjb2RlLnByb3RvdHlwZSgpOworICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5zdGFuY2VvZj4oKTsKKyAg
ICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOworICAgIGludCB2YWx1ZSA9IGJ5dGVj
b2RlLnZhbHVlLm9mZnNldCgpOworICAgIGludCBwcm90byA9IGJ5dGVjb2RlLnByb3RvdHlwZS5v
ZmZzZXQoKTsKICAgICAKICAgICBKSVRJbnN0YW5jZU9mR2VuZXJhdG9yJiBnZW4gPSBtX2luc3Rh
bmNlT2ZzW21faW5zdGFuY2VPZkluZGV4KytdOwogICAgIApAQCAtMTg4LDE1ICsxOTUsMTUgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXMKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQ
YXRoQmVnaW4sIGNhbGwpOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaW5zdGFuY2VvZl9j
dXN0b20oSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1
c3RvbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
CiAKLSAgICBhdXRvJiBieXRlY29kZSA9ICpyZWludGVycHJldF9jYXN0PE9wSW5zdGFuY2VvZkN1
c3RvbSo+KGN1cnJlbnRJbnN0cnVjdGlvbik7Ci0gICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdCgp
OwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLnZhbHVlKCk7Ci0gICAgaW50IGNvbnN0cnVjdG9y
ID0gYnl0ZWNvZGUuY29uc3RydWN0b3IoKTsKLSAgICBpbnQgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5
dGVjb2RlLmhhc0luc3RhbmNlVmFsdWUoKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEluc3RhbmNlb2ZDdXN0b20+KCk7CisgICAgaW50IGRzdCA9IGJ5dGVj
b2RlLmRzdC5vZmZzZXQoKTsKKyAgICBpbnQgdmFsdWUgPSBieXRlY29kZS52YWx1ZS5vZmZzZXQo
KTsKKyAgICBpbnQgY29uc3RydWN0b3IgPSBieXRlY29kZS5jb25zdHJ1Y3Rvci5vZmZzZXQoKTsK
KyAgICBpbnQgaGFzSW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLmhhc0luc3RhbmNlVmFsdWUub2Zm
c2V0KCk7CiAKICAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0TG9h
ZFBheWxvYWQoY29uc3RydWN0b3IsIHJlZ1QyKTsKQEAgLTIwNSwxMCArMjEyLDExIEBAIHZvaWQg
SklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8CiAgICAgZW1pdFN0b3JlQm9vbChkc3QsIHJldHVyblZhbHVlR1BS
KTsKIH0KICAgICAKLXZvaWQgSklUOjplbWl0X29wX2lzX2VtcHR5KEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9pc19lbXB0eShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQ7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BJc0VtcHR5PigpOworICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7CisgICAg
aW50IHZhbHVlID0gYnl0ZWNvZGUub3BlcmFuZC5vZmZzZXQoKTsKICAgICAKICAgICBlbWl0TG9h
ZCh2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKICAgICBjb21wYXJlMzIoRXF1YWwsIHJlZ1QxLCBUcnVz
dGVkSW1tMzIoSlNWYWx1ZTo6RW1wdHlWYWx1ZVRhZyksIHJlZ1QwKTsKQEAgLTIxNiwxMCArMjI0
LDExIEBAIHZvaWQgSklUOjplbWl0X29wX2lzX2VtcHR5KEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiAgICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QwKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRfb3BfaXNfdW5kZWZpbmVkKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2
b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRlZmluZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKLSAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZDsKLSAgICBpbnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwor
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNVbmRlZmluZWQ+
KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKKyAgICBpbnQgdmFsdWUg
PSBieXRlY29kZS5vcGVyYW5kLm9mZnNldCgpOwogICAgIAogICAgIGVtaXRMb2FkKHZhbHVlLCBy
ZWdUMSwgcmVnVDApOwogICAgIEp1bXAgaXNDZWxsID0gYnJhbmNoSWZDZWxsKHJlZ1QxKTsKQEAg
LTI0MywyMCArMjUyLDIyIEBAIHZvaWQgSklUOjplbWl0X29wX2lzX3VuZGVmaW5lZChJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZWdUMCk7
CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2lzX2Jvb2xlYW4oSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX2lzX2Jvb2xlYW4oY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
SXNCb29sZWFuPigpOworICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7CisgICAg
aW50IHZhbHVlID0gYnl0ZWNvZGUub3BlcmFuZC5vZmZzZXQoKTsKICAgICAKICAgICBlbWl0TG9h
ZFRhZyh2YWx1ZSwgcmVnVDApOwogICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJ
bW0zMihKU1ZhbHVlOjpCb29sZWFuVGFnKSwgcmVnVDApOwogICAgIGVtaXRTdG9yZUJvb2woZHN0
LCByZWdUMCk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2lzX251bWJlcihJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfaXNfbnVtYmVyKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHZhbHVlID0gY3VycmVudEluc3RydWN0
aW9uWzJdLnUub3BlcmFuZDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcElzTnVtYmVyPigpOworICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7
CisgICAgaW50IHZhbHVlID0gYnl0ZWNvZGUub3BlcmFuZC5vZmZzZXQoKTsKICAgICAKICAgICBl
bWl0TG9hZFRhZyh2YWx1ZSwgcmVnVDApOwogICAgIGFkZDMyKFRydXN0ZWRJbW0zMigxKSwgcmVn
VDApOwpAQCAtMjY0LDExICsyNzUsMTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfbnVtYmVyKElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdFN0b3JlQm9vbChkc3QsIHJl
Z1QwKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfaXNfY2VsbF93aXRoX3R5cGUoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX2lzX2NlbGxfd2l0aF90
eXBlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaW50IGRz
dCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHZhbHVlID0gY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICBpbnQgdHlwZSA9IGN1cnJlbnRJbnN0
cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BJc0NlbGxXaXRoVHlwZT4oKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0
Lm9mZnNldCgpOworICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm9wZXJhbmQub2Zmc2V0KCk7Cisg
ICAgaW50IHR5cGUgPSBieXRlY29kZS50eXBlOwogCiAgICAgZW1pdExvYWQodmFsdWUsIHJlZ1Qx
LCByZWdUMCk7CiAgICAgSnVtcCBpc05vdENlbGwgPSBicmFuY2hJZk5vdENlbGwocmVnVDEpOwpA
QCAtMjgzLDEwICsyOTUsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfY2VsbF93aXRoX3R5cGUo
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBlbWl0U3RvcmVCb29sKGRzdCwg
cmVnVDApOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9pc19vYmplY3QoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX2lzX29iamVjdChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGludCBkc3QgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQ7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BJc09iamVjdD4oKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwor
ICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm9wZXJhbmQub2Zmc2V0KCk7CiAKICAgICBlbWl0TG9h
ZCh2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKICAgICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90
Q2VsbChyZWdUMSk7CkBAIC0zMDEsMTAgKzMxNCwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19v
YmplY3QoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBlbWl0U3RvcmVCb29s
KGRzdCwgcmVnVDApOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF90b19wcmltaXRpdmUoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX3RvX3ByaW1pdGl2
ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGludCBkc3Qg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBzcmMgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wVG9QcmltaXRpdmU+KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRz
dC5vZmZzZXQoKTsKKyAgICBpbnQgc3JjID0gYnl0ZWNvZGUuc3JjLm9mZnNldCgpOwogCiAgICAg
ZW1pdExvYWQoc3JjLCByZWdUMSwgcmVnVDApOwogCkBAIC0zMTYsMTkgKzMzMCwyMSBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF90b19wcmltaXRpdmUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKICAgICAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKK3ZvaWQgSklUOjplbWl0X29wX3NldF9mdW5jdGlvbl9uYW1lKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaW50IGZ1bmMgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kOwotICAgIGludCBuYW1lID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUu
b3BlcmFuZDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFNl
dEZ1bmN0aW9uTmFtZT4oKTsKKyAgICBpbnQgZnVuYyA9IGJ5dGVjb2RlLmZ1bmN0aW9uLm9mZnNl
dCgpOworICAgIGludCBuYW1lID0gYnl0ZWNvZGUubmFtZS5vZmZzZXQoKTsKICAgICBlbWl0TG9h
ZFBheWxvYWQoZnVuYywgcmVnVDEpOwogICAgIGVtaXRMb2FkKG5hbWUsIHJlZ1QzLCByZWdUMik7
CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25TZXRGdW5jdGlvbk5hbWUsIHJlZ1QxLCBKU1Zh
bHVlUmVncyhyZWdUMywgcmVnVDIpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9ub3QoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBpbnQgZHN0ID0gY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgc3JjID0gY3VycmVudEluc3RydWN0
aW9uWzJdLnUub3BlcmFuZDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcE5vdD4oKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOworICAg
IGludCBzcmMgPSBieXRlY29kZS5vcGVyYW5kLm9mZnNldCgpOwogCiAgICAgZW1pdExvYWRUYWco
c3JjLCByZWdUMCk7CiAKQEAgLTMzOSwxMCArMzU1LDExIEBAIHZvaWQgSklUOjplbWl0X29wX25v
dChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGVtaXRTdG9yZUJvb2woZHN0
LCByZWdUMCwgKGRzdCA9PSBzcmMpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNlKElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2Uo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBpbnQgY29uZCA9
IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0g
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEpmYWxzZT4oKTsKKyAgICBpbnQgY29uZCA9IGJ5dGVjb2Rl
LmNvbmRpdGlvbi5vZmZzZXQoKTsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUudGFyZ2V0KTsKIAogICAgIGVtaXRMb2FkKGNvbmQs
IHJlZ1QxLCByZWdUMCk7CiAKQEAgLTM1MywxMCArMzcwLDExIEBAIHZvaWQgSklUOjplbWl0X29w
X2pmYWxzZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGFkZEp1bXAoYnJh
bmNoSWZGYWxzZXkoKnZtKCksIHZhbHVlLCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZw
UmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmds
b2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX2p0cnVlKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaW50IGNvbmQgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGN1
cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BKdHJ1ZT4oKTsKKyAgICBpbnQgY29uZCA9IGJ5dGVjb2RlLmNv
bmRpdGlvbi5vZmZzZXQoKTsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUudGFyZ2V0KTsKIAogICAgIGVtaXRMb2FkKGNvbmQsIHJl
Z1QxLCByZWdUMCk7CiAgICAgYm9vbCBzaG91bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQg
PSB0cnVlOwpAQCAtMzY2LDEwICszODQsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhZGRKdW1wKGJyYW5jaElmVHJ1dGh5
KCp2bSgpLCB2YWx1ZSwgc2NyYXRjaDEsIHNjcmF0Y2gyLCBmcFJlZ1QwLCBmcFJlZ1QxLCBzaG91
bGRDaGVja01hc3F1ZXJhZGVzQXNVbmRlZmluZWQsIG1fY29kZUJsb2NrLT5nbG9iYWxPYmplY3Qo
KSksIHRhcmdldCk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2plcV9udWxsKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGludCBzcmMgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIHVuc2lnbmVkIHRhcmdldCA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BKZXFOdWxsPigpOworICAgIGludCBzcmMgPSBieXRlY29kZS52YWx1ZS5v
ZmZzZXQoKTsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvbiwgYnl0ZWNvZGUudGFyZ2V0KTsKIAogICAgIGVtaXRMb2FkKHNyYywgcmVnVDEsIHJlZ1Qw
KTsKIApAQCAtMzkxLDEwICs0MTAsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBtYXNxdWVyYWRlc0dsb2JhbE9iamVj
dElzRm9yZWlnbi5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX251bGwo
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX2puZXFf
bnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGludCBz
cmMgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxTnVsbD4oKTsKKyAgICBpbnQgc3JjID0gYnl0
ZWNvZGUudmFsdWUub2Zmc2V0KCk7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLnRhcmdldCk7CiAKICAgICBlbWl0TG9hZChzcmMs
IHJlZ1QxLCByZWdUMCk7CiAKQEAgLTQxNiwyNiArNDM2LDMwIEBAIHZvaWQgSklUOjplbWl0X29w
X2puZXFfbnVsbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIHdhc05vdElt
bWVkaWF0ZS5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9wdHIo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBpbnQgc3JjID0g
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBTcGVjaWFsOjpQb2ludGVyIHB0
ciA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51LnNwZWNpYWxQb2ludGVyOwotICAgIHVuc2lnbmVk
IHRhcmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVxUHRyPigpOworICAgIGF1dG8mIG1l
dGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGludCBzcmMgPSBi
eXRlY29kZS52YWx1ZS5vZmZzZXQoKTsKKyAgICBTcGVjaWFsOjpQb2ludGVyIHB0ciA9IGJ5dGVj
b2RlLnNwZWNpYWxQb2ludGVyOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3Vy
cmVudEluc3RydWN0aW9uLCBieXRlY29kZS50YXJnZXQpOwogCiAgICAgZW1pdExvYWQoc3JjLCBy
ZWdUMSwgcmVnVDApOwogICAgIEp1bXAgbm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMSk7
CiAgICAgSnVtcCBlcXVhbCA9IGJyYW5jaFB0cihFcXVhbCwgcmVnVDAsIFRydXN0ZWRJbW1QdHIo
YWN0dWFsUG9pbnRlckZvcihtX2NvZGVCbG9jaywgcHRyKSkpOwogICAgIG5vdENlbGwubGluayh0
aGlzKTsKLSAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMigxKSwgJmN1cnJlbnRJbnN0cnVjdGlvbls0
XS51Lm9wZXJhbmQpOworICAgIHN0b3JlOChUcnVzdGVkSW1tMzIoMSksICZtZXRhZGF0YS5oYXNK
dW1wZWQpOwogICAgIGFkZEp1bXAoanVtcCgpLCB0YXJnZXQpOwogICAgIGVxdWFsLmxpbmsodGhp
cyk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2VxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9lcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kOwotICAgIGludCBzcmMxID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAg
ICBpbnQgc3JjMiA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKKworICAgIGludCBkc3Qg
PSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7CisgICAgaW50IHNyYzEgPSBieXRlY29kZS5saHMub2Zm
c2V0KCk7CisgICAgaW50IHNyYzIgPSBieXRlY29kZS5yaHMub2Zmc2V0KCk7CiAKICAgICBlbWl0
TG9hZDIoc3JjMSwgcmVnVDEsIHJlZ1QwLCBzcmMyLCByZWdUMywgcmVnVDIpOwogICAgIGFkZFNs
b3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDMpKTsKQEAgLTQ0Nyw5ICs0NzEs
MTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKICAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmVnVDApOwogfQogCi12b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9lcShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQogewotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRXE+
KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKIAogICAgIEp1bXBMaXN0
IHN0b3JlUmVzdWx0OwogICAgIEp1bXBMaXN0IGdlbmVyaWNDYXNlOwpAQCAtNDczLDExICs0OTgs
MTIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2VxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5PjoKICAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmV0
dXJuVmFsdWVHUFIpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9qZXEoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX2plcShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGludCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bM10udS5vcGVyYW5kOwotICAgIGludCBzcmMxID0gY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZDsKLSAgICBpbnQgc3JjMiA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJh
bmQ7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKZXE+KCk7
CisgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5
dGVjb2RlLnRhcmdldCk7CisgICAgaW50IHNyYzEgPSBieXRlY29kZS5saHMub2Zmc2V0KCk7Cisg
ICAgaW50IHNyYzIgPSBieXRlY29kZS5yaHMub2Zmc2V0KCk7CiAKICAgICBlbWl0TG9hZDIoc3Jj
MSwgcmVnVDEsIHJlZ1QwLCBzcmMyLCByZWdUMywgcmVnVDIpOwogICAgIGFkZFNsb3dDYXNlKGJy
YW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDMpKTsKQEAgLTUxMiwxNiArNTM4LDE5IEBAIHZv
aWQgSklUOjpjb21waWxlT3BFcUp1bXBTbG93KFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIsIENvbXBpbGVPcEVxCiAgICAgZG9uZS5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfamVxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
amVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgY29tcGlsZU9wRXFKdW1wU2xvdyhpdGVy
LCBDb21waWxlT3BFcVR5cGU6OkVxLCBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsK
KyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKKyAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNv
ZGUudGFyZ2V0KTsKKyAgICBjb21waWxlT3BFcUp1bXBTbG93KGl0ZXIsIENvbXBpbGVPcEVxVHlw
ZTo6RXEsIHRhcmdldCk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX25lcShJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfbmVxKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHNyYzEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kOwotICAgIGludCBzcmMyID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFu
ZDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcT4oKTsK
KyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOworICAgIGludCBzcmMxID0gYnl0
ZWNvZGUubGhzLm9mZnNldCgpOworICAgIGludCBzcmMyID0gYnl0ZWNvZGUucmhzLm9mZnNldCgp
OwogCiAgICAgZW1pdExvYWQyKHNyYzEsIHJlZ1QxLCByZWdUMCwgc3JjMiwgcmVnVDMsIHJlZ1Qy
KTsKICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIHJlZ1QzKSk7CkBA
IC01MzMsOSArNTYyLDEwIEBAIHZvaWQgSklUOjplbWl0X29wX25lcShJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZWdUMCk7CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9uZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBpbnQgZHN0ID0gY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcE5lcT4oKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgp
OwogCiAgICAgSnVtcExpc3Qgc3RvcmVSZXN1bHQ7CiAgICAgSnVtcExpc3QgZ2VuZXJpY0Nhc2U7
CkBAIC01NjAsMTEgKzU5MCwxMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfbmVxKEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5PgogICAgIGVtaXRT
dG9yZUJvb2woZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2pu
ZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX2pu
ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBpbnQgdGFy
Z2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICBpbnQgc3JjMSA9IGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHNyYzIgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSm5lcT4oKTsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1
cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUudGFyZ2V0KTsKKyAgICBpbnQgc3JjMSA9IGJ5dGVj
b2RlLmxocy5vZmZzZXQoKTsKKyAgICBpbnQgc3JjMiA9IGJ5dGVjb2RlLnJocy5vZmZzZXQoKTsK
IAogICAgIGVtaXRMb2FkMihzcmMxLCByZWdUMSwgcmVnVDAsIHNyYzIsIHJlZ1QzLCByZWdUMik7
CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMykpOwpAQCAt
NTc0LDE2ICs2MDUsMjAgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcShJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogICAgIGFkZEp1bXAoYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBy
ZWdUMiksIHRhcmdldCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qbmVxKEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bfam5lcShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQog
ewotICAgIGNvbXBpbGVPcEVxSnVtcFNsb3coaXRlciwgQ29tcGlsZU9wRXFUeXBlOjpORXEsIGN1
cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSm5lcT4oKTsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1w
VGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUudGFyZ2V0KTsKKyAgICBjb21waWxl
T3BFcUp1bXBTbG93KGl0ZXIsIENvbXBpbGVPcEVxVHlwZTo6TkVxLCB0YXJnZXQpOwogfQogCi12
b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlIHR5cGUpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Cit2
b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlIHR5cGUpCiB7Ci0gICAgaW50IGRzdCA9IGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHNyYzEgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGludCBzcmMyID0gY3VycmVudEluc3RydWN0aW9u
WzNdLnUub3BlcmFuZDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcD4oKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOworICAgIGludCBz
cmMxID0gYnl0ZWNvZGUubGhzLm9mZnNldCgpOworICAgIGludCBzcmMyID0gYnl0ZWNvZGUucmhz
Lm9mZnNldCgpOwogCiAgICAgZW1pdExvYWQyKHNyYzEsIHJlZ1QxLCByZWdUMCwgc3JjMiwgcmVn
VDMsIHJlZ1QyKTsKIApAQCAtNjA3LDIxICs2NDIsMjMgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcFN0
cmljdEVxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIENvbXBpbGVPcFN0cmljdEVx
VHkKICAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmVnVDApOwogfQogCi12b2lkIEpJVDo6ZW1pdF9v
cF9zdHJpY3RlcShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVt
aXRfb3Bfc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsK
LSAgICBjb21waWxlT3BTdHJpY3RFcShjdXJyZW50SW5zdHJ1Y3Rpb24sIENvbXBpbGVPcFN0cmlj
dEVxVHlwZTo6U3RyaWN0RXEpOworICAgIGNvbXBpbGVPcFN0cmljdEVxPE9wU3RyaWN0ZXE+KGN1
cnJlbnRJbnN0cnVjdGlvbiwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSk7CiB9CiAK
LXZvaWQgSklUOjplbWl0X29wX25zdHJpY3RlcShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgY29tcGlsZU9wU3RyaWN0RXEoY3VycmVudEluc3RydWN0
aW9uLCBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSk7CisgICAgY29tcGlsZU9wU3Ry
aWN0RXE8T3BOc3RyaWN0ZXE+KGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29tcGlsZU9wU3RyaWN0RXFU
eXBlOjpOU3RyaWN0RXEpOwogfQogCi12b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXFKdW1wKElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIENvbXBpbGVPcFN0cmljdEVxVHlwZSB0eXBl
KQordGVtcGxhdGU8dHlwZW5hbWUgT3A+Cit2b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXFKdW1w
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIENvbXBpbGVPcFN0cmljdEVx
VHlwZSB0eXBlKQogewotICAgIGludCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5v
cGVyYW5kOwotICAgIGludCBzcmMxID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsK
LSAgICBpbnQgc3JjMiA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3A+KCk7CisgICAgaW50IHRhcmdl
dCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS50YXJnZXQpOworICAg
IGludCBzcmMxID0gYnl0ZWNvZGUubGhzLm9mZnNldCgpOworICAgIGludCBzcmMyID0gYnl0ZWNv
ZGUucmhzLm9mZnNldCgpOwogCiAgICAgZW1pdExvYWQyKHNyYzEsIHJlZ1QxLCByZWdUMCwgc3Jj
MiwgcmVnVDMsIHJlZ1QyKTsKIApAQCAtNjQzLDM4ICs2ODAsNDEgQEAgdm9pZCBKSVQ6OmNvbXBp
bGVPcFN0cmljdEVxSnVtcChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBDb21waWxl
T3BTdHJpY3QKICAgICAgICAgYWRkSnVtcChicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIHJlZ1Qy
KSwgdGFyZ2V0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfanN0cmljdGVxKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9qc3RyaWN0ZXEoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBjb21waWxlT3BTdHJpY3RF
cUp1bXAoY3VycmVudEluc3RydWN0aW9uLCBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVx
KTsKKyAgICBjb21waWxlT3BTdHJpY3RFcUp1bXA8T3BKc3RyaWN0ZXE+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RFcSk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0X29wX2puc3RyaWN0ZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQg
SklUOjplbWl0X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKLSAgICBjb21waWxlT3BTdHJpY3RFcUp1bXAoY3VycmVudEluc3RydWN0aW9uLCBD
b21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSk7CisgICAgY29tcGlsZU9wU3RyaWN0RXFK
dW1wPE9wSm5zdHJpY3RlcT4oY3VycmVudEluc3RydWN0aW9uLCBDb21waWxlT3BTdHJpY3RFcVR5
cGU6Ok5TdHJpY3RFcSk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qc3RyaWN0ZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKIHsKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCi0gICAgdW5zaWduZWQg
dGFyZ2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpzdHJpY3RlcT4oKTsKKyAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUudGFyZ2V0
KTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNvbXBhcmVTdHJpY3RFcSwgSlNWYWx1ZVJl
Z3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiAgICAgZW1pdEp1
bXBTbG93VG9Ib3QoYnJhbmNoVGVzdDMyKE5vblplcm8sIHJldHVyblZhbHVlR1BSKSwgdGFyZ2V0
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puc3RyaWN0ZXEoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF9qbnN0cmljdGVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7
CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAotICAgIHVuc2lnbmVkIHRhcmdldCA9IGN1
cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BKbnN0cmljdGVxPigpOworICAgIHVuc2lnbmVkIHRhcmdldCA9
IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS50YXJnZXQpOwogICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBKU1ZhbHVlUmVncyhyZWdUMSwg
cmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKICAgICBlbWl0SnVtcFNsb3dUb0hv
dChicmFuY2hUZXN0MzIoWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCi12b2lk
IEpJVDo6ZW1pdF9vcF9lcV9udWxsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2
b2lkIEpJVDo6ZW1pdF9vcF9lcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7
Ci0gICAgaW50IHNyYyA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcU51bGw+KCk7CisgICAgaW50
IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKKyAgICBpbnQgc3JjID0gYnl0ZWNvZGUub3Bl
cmFuZC5vZmZzZXQoKTsKIAogICAgIGVtaXRMb2FkKHNyYywgcmVnVDEsIHJlZ1QwKTsKICAgICBK
dW1wIGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKTsKQEAgLTcwMiwxMCArNzQy
LDExIEBAIHZvaWQgSklUOjplbWl0X29wX2VxX251bGwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKICAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmVnVDEpOwogfQogCi12b2lkIEpJVDo6
ZW1pdF9vcF9uZXFfbnVsbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBK
SVQ6OmVtaXRfb3BfbmVxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKLSAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAg
ICBpbnQgc3JjID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE5lcU51bGw+KCk7CisgICAgaW50IGRz
dCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKKyAgICBpbnQgc3JjID0gYnl0ZWNvZGUub3BlcmFu
ZC5vZmZzZXQoKTsKIAogICAgIGVtaXRMb2FkKHNyYywgcmVnVDEsIHJlZ1QwKTsKICAgICBKdW1w
IGlzSW1tZWRpYXRlID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKTsKQEAgLTczMywxOSArNzc0LDIx
IEBAIHZvaWQgSklUOjplbWl0X29wX25lcV9udWxsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiAgICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QxKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRfb3BfdGhyb3coSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjpl
bWl0X29wX3Rocm93KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Cisg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUaHJvdz4oKTsKICAg
ICBBU1NFUlQocmVnVDAgPT0gcmV0dXJuVmFsdWVHUFIpOwogICAgIGNvcHlDYWxsZWVTYXZlc1Rv
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtKCktPnRvcEVudHJ5RnJhbWUpOwotICAgIGVt
aXRMb2FkKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHJlZ1QxLCByZWdUMCk7Cisg
ICAgZW1pdExvYWQoYnl0ZWNvZGUudmFsdWUub2Zmc2V0KCksIHJlZ1QxLCByZWdUMCk7CiAgICAg
Y2FsbE9wZXJhdGlvbk5vRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uVGhyb3csIEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCkpOwogICAgIGp1bXBUb0V4Y2VwdGlvbkhhbmRsZXIoKnZtKCkpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdF9vcF90b19udW1iZXIoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKK3ZvaWQgSklUOjplbWl0X29wX3RvX251bWJlcihjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kOwotICAgIGludCBzcmMgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
OworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9OdW1iZXI+
KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKKyAgICBpbnQgc3JjID0g
Ynl0ZWNvZGUub3BlcmFuZC5vZmZzZXQoKTsKIAogICAgIGVtaXRMb2FkKHNyYywgcmVnVDEsIHJl
Z1QwKTsKIApAQCAtNzUzLDE1ICs3OTYsMTYgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdG9fbnVtYmVy
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
MzIoQWJvdmVPckVxdWFsLCByZWdUMSwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6Okxvd2VzdFRhZykp
KTsKICAgICBpc0ludDMyLmxpbmsodGhpcyk7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jaykpOwogICAgIGlmIChzcmMgIT0gZHN0KQogICAgICAgICBlbWl0U3RvcmUoZHN0LCByZWdU
MSwgcmVnVDApOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF90b19zdHJpbmcoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX3RvX3N0cmluZyhjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGludCBkc3QgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBzcmMgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wVG9TdHJpbmc+KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsK
KyAgICBpbnQgc3JjID0gYnl0ZWNvZGUub3BlcmFuZC5vZmZzZXQoKTsKIAogICAgIGVtaXRMb2Fk
KHNyYywgcmVnVDEsIHJlZ1QwKTsKIApAQCAtNzcyLDIzICs4MTYsMjYgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfdG9fc3RyaW5nKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgICAg
IGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX3Rv
X29iamVjdChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRf
b3BfdG9fb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0g
ICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHNy
YyA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb09iamVjdD4oKTsKKyAgICBpbnQgZHN0ID0gYnl0
ZWNvZGUuZHN0Lm9mZnNldCgpOworICAgIGludCBzcmMgPSBieXRlY29kZS5vcGVyYW5kLm9mZnNl
dCgpOwogCiAgICAgZW1pdExvYWQoc3JjLCByZWdUMSwgcmVnVDApOwogCiAgICAgYWRkU2xvd0Nh
c2UoYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKSk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZOb3RP
YmplY3QocmVnVDApKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKKyAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7CiAgICAg
aWYgKHNyYyAhPSBkc3QpCiAgICAgICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7CiB9
CiAKLXZvaWQgSklUOjplbWl0X29wX2NhdGNoKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCit2b2lkIEpJVDo6ZW1pdF9vcF9jYXRjaChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogeworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wQ2F0Y2g+KCk7CisKICAgICByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tRW50cnlGcmFtZUNhbGxl
ZVNhdmVzQnVmZmVyKHZtKCktPnRvcEVudHJ5RnJhbWUpOwogCiAgICAgbW92ZShUcnVzdGVkSW1t
UHRyKG1fdm0pLCByZWdUMyk7CkBAIC04MTEsMTMgKzg1OCwxMyBAQCB2b2lkIEpJVDo6ZW1pdF9v
cF9jYXRjaChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogCiAgICAgc3RvcmUzMihU
cnVzdGVkSW1tMzIoMCksIEFkZHJlc3MocmVnVDMsIFZNOjpleGNlcHRpb25PZmZzZXQoKSkpOwog
Ci0gICAgdW5zaWduZWQgZXhjZXB0aW9uID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZDsKKyAgICB1bnNpZ25lZCBleGNlcHRpb24gPSBieXRlY29kZS5leGNlcHRpb24ub2Zmc2V0KCk7
CiAgICAgZW1pdFN0b3JlKGV4Y2VwdGlvbiwgcmVnVDEsIHJlZ1QyKTsKIAogICAgIGxvYWQzMihB
ZGRyZXNzKHJlZ1QyLCBFeGNlcHRpb246OnZhbHVlT2Zmc2V0KCkgKyBPQkpFQ1RfT0ZGU0VUT0Yo
SlNWYWx1ZSwgdS5hc0JpdHMucGF5bG9hZCkpLCByZWdUMCk7CiAgICAgbG9hZDMyKEFkZHJlc3Mo
cmVnVDIsIEV4Y2VwdGlvbjo6dmFsdWVPZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVl
LCB1LmFzQml0cy50YWcpKSwgcmVnVDEpOwogCi0gICAgdW5zaWduZWQgdGhyb3duVmFsdWUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIHVuc2lnbmVkIHRocm93blZhbHVl
ID0gYnl0ZWNvZGUudGhyb3duVmFsdWUub2Zmc2V0KCk7CiAgICAgZW1pdFN0b3JlKHRocm93blZh
bHVlLCByZWdUMSwgcmVnVDApOwogCiAjaWYgRU5BQkxFKERGR19KSVQpCkBAIC04MjUsNyArODcy
LDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfY2F0Y2goSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKICAgICAvLyBhcmd1bWVudCB0eXBlIHByb29mcywgc3RvcmluZyBsb2NhbHMgdG8gdGhl
IGJ1ZmZlciwgZXRjCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE3NTU5OAogCi0gICAgVmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlciogYnVmZmVyID0g
c3RhdGljX2Nhc3Q8VmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlcio+KGN1cnJlbnRJbnN0cnVj
dGlvblszXS51LnBvaW50ZXIpOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOworICAgIFZhbHVlUHJvZmlsZUFuZE9wZXJhbmRCdWZmZXIqIGJ1ZmZl
ciA9IG1ldGFkYXRhLmJ1ZmZlcjsKICAgICBpZiAoYnVmZmVyIHx8ICFzaG91bGRFbWl0UHJvZmls
aW5nKCkpCiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uVHJ5T1NSRW50ZXJBdENhdGNo
LCBtX2J5dGVjb2RlT2Zmc2V0KTsKICAgICBlbHNlCkBAIC04NDQsMjQgKzg5MiwyNiBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9jYXRjaChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogI2Vu
ZGlmIC8vIEVOQUJMRShERkdfSklUKQogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9pZGVudGl0eV93
aXRoX3Byb2ZpbGUoSW5zdHJ1Y3Rpb24qKQordm9pZCBKSVQ6OmVtaXRfb3BfaWRlbnRpdHlfd2l0
aF9wcm9maWxlKGNvbnN0IEluc3RydWN0aW9uKikKIHsKICAgICAvLyBXZSBkb24ndCBuZWVkIHRv
IGRvIGFueXRoaW5nIGhlcmUuLi4KIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3BhcmVudF9z
Y29wZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X3BhcmVudF9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewotICAgIGludCBjdXJyZW50U2NvcGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
OworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0UGFyZW50
U2NvcGU+KCk7CisgICAgaW50IGN1cnJlbnRTY29wZSA9IGJ5dGVjb2RlLnNjb3BlLm9mZnNldCgp
OwogICAgIGVtaXRMb2FkUGF5bG9hZChjdXJyZW50U2NvcGUsIHJlZ1QwKTsKICAgICBsb2FkUHRy
KEFkZHJlc3MocmVnVDAsIEpTU2NvcGU6Om9mZnNldE9mTmV4dCgpKSwgcmVnVDApOwotICAgIGVt
aXRTdG9yZUNlbGwoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgcmVnVDApOworICAg
IGVtaXRTdG9yZUNlbGwoYnl0ZWNvZGUuZHN0Lm9mZnNldCgpLCByZWdUMCk7CiB9CiAKLXZvaWQg
SklUOjplbWl0X29wX3N3aXRjaF9pbW0oSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
K3ZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9pbW0oY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKLSAgICBzaXplX3QgdGFibGVJbmRleCA9IGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgZGVmYXVsdE9mZnNldCA9IGN1cnJlbnRJbnN0
cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgc2NydXRpbmVlID0gY3VycmVudElu
c3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFN3aXRjaEltbT4oKTsKKyAgICBzaXplX3QgdGFibGVJbmRleCA9IGJ5dGVj
b2RlLnRhYmxlSW5kZXg7CisgICAgdW5zaWduZWQgZGVmYXVsdE9mZnNldCA9IGp1bXBUYXJnZXQo
Y3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS5kZWZhdWx0T2Zmc2V0KTsKKyAgICB1bnNpZ25l
ZCBzY3J1dGluZWUgPSBieXRlY29kZS5zY3J1dGluZWUub2Zmc2V0KCk7CiAKICAgICAvLyBjcmVh
dGUganVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2gg
c3RhdGVtZW50LgogICAgIFNpbXBsZUp1bXBUYWJsZSoganVtcFRhYmxlID0gJm1fY29kZUJsb2Nr
LT5zd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CkBAIC04NzMsMTEgKzkyMywxMiBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9zd2l0Y2hfaW1tKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiAgICAganVtcChyZXR1cm5WYWx1ZUdQUiwgTm9QdHJUYWcpOwogfQogCi12b2lkIEpJVDo6ZW1p
dF9vcF9zd2l0Y2hfY2hhcihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBK
SVQ6OmVtaXRfb3Bfc3dpdGNoX2NoYXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKLSAgICBzaXplX3QgdGFibGVJbmRleCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgZGVmYXVsdE9mZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgc2NydXRpbmVlID0gY3VycmVudEluc3RydWN0
aW9uWzNdLnUub3BlcmFuZDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFN3aXRjaENoYXI+KCk7CisgICAgc2l6ZV90IHRhYmxlSW5kZXggPSBieXRlY29kZS50
YWJsZUluZGV4OworICAgIHVuc2lnbmVkIGRlZmF1bHRPZmZzZXQgPSBqdW1wVGFyZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUuZGVmYXVsdE9mZnNldCk7CisgICAgdW5zaWduZWQgc2Ny
dXRpbmVlID0gYnl0ZWNvZGUuc2NydXRpbmVlLm9mZnNldCgpOwogCiAgICAgLy8gY3JlYXRlIGp1
bXAgdGFibGUgZm9yIHN3aXRjaCBkZXN0aW5hdGlvbnMsIHRyYWNrIHRoaXMgc3dpdGNoIHN0YXRl
bWVudC4KICAgICBTaW1wbGVKdW1wVGFibGUqIGp1bXBUYWJsZSA9ICZtX2NvZGVCbG9jay0+c3dp
dGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpOwpAQCAtODg5LDExICs5NDAsMTIgQEAgdm9pZCBKSVQ6
OmVtaXRfb3Bfc3dpdGNoX2NoYXIoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAg
ICBqdW1wKHJldHVyblZhbHVlR1BSLCBOb1B0clRhZyk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29w
X3N3aXRjaF9zdHJpbmcoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklU
OjplbWl0X29wX3N3aXRjaF9zdHJpbmcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKLSAgICBzaXplX3QgdGFibGVJbmRleCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgZGVmYXVsdE9mZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgc2NydXRpbmVlID0gY3VycmVudEluc3RydWN0
aW9uWzNdLnUub3BlcmFuZDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcFN3aXRjaFN0cmluZz4oKTsKKyAgICBzaXplX3QgdGFibGVJbmRleCA9IGJ5dGVjb2Rl
LnRhYmxlSW5kZXg7CisgICAgdW5zaWduZWQgZGVmYXVsdE9mZnNldCA9IGp1bXBUYXJnZXQoY3Vy
cmVudEluc3RydWN0aW9uLCBieXRlY29kZS5kZWZhdWx0T2Zmc2V0KTsKKyAgICB1bnNpZ25lZCBz
Y3J1dGluZWUgPSBieXRlY29kZS5zY3J1dGluZWUub2Zmc2V0KCk7CiAKICAgICAvLyBjcmVhdGUg
anVtcCB0YWJsZSBmb3Igc3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3Rh
dGVtZW50LgogICAgIFN0cmluZ0p1bXBUYWJsZSoganVtcFRhYmxlID0gJm1fY29kZUJsb2NrLT5z
dHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCk7CkBAIC05MDQsNDEgKzk1Niw0NSBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hfc3RyaW5nKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiAgICAganVtcChyZXR1cm5WYWx1ZUdQUiwgTm9QdHJUYWcpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdF9vcF9kZWJ1ZyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBK
SVQ6OmVtaXRfb3BfZGVidWcoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcERlYnVnPigp
OwogICAgIGxvYWQzMihjb2RlQmxvY2soKS0+ZGVidWdnZXJSZXF1ZXN0c0FkZHJlc3MoKSwgcmVn
VDApOwogICAgIEp1bXAgbm9EZWJ1Z2dlclJlcXVlc3RzID0gYnJhbmNoVGVzdDMyKFplcm8sIHJl
Z1QwKTsKLSAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlYnVnLCBjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kKTsKKyAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlYnVnLCBzdGF0
aWNfY2FzdDxpbnQ+KGJ5dGVjb2RlLmRlYnVnSG9va1R5cGUpKTsKICAgICBub0RlYnVnZ2VyUmVx
dWVzdHMubGluayh0aGlzKTsKIH0KIAogCi12b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfZW50ZXIoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBlbWl0RW50ZXJPcHRpbWl6
YXRpb25DaGVjaygpOwogICAgIAogICAgIC8vIEV2ZW4gdGhvdWdoIEpJVCBjb2RlIGRvZXNuJ3Qg
dXNlIHRoZW0sIHdlIGluaXRpYWxpemUgb3VyIGNvbnN0YW50CiAgICAgLy8gcmVnaXN0ZXJzIHRv
IHphcCBzdGFsZSBwb2ludGVycywgdG8gYXZvaWQgdW5uZWNlc3NhcmlseSBwcm9sb25naW5nCiAg
ICAgLy8gb2JqZWN0IGxpZmV0aW1lIGFuZCBpbmNyZWFzaW5nIEdDIHByZXNzdXJlLgotICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgbV9jb2RlQmxvY2stPm51bVZhcnMoKTsgKytpKQorICAgIGZvciAo
aW50IGkgPSBDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxS
ZWdpc3RlcnMoKTsgaSA8IG1fY29kZUJsb2NrLT5udW1WYXJzKCk7ICsraSkKICAgICAgICAgZW1p
dFN0b3JlKHZpcnR1YWxSZWdpc3RlckZvckxvY2FsKGkpLm9mZnNldCgpLCBqc1VuZGVmaW5lZCgp
KTsKIAogICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3Ry
dWN0aW9uLCBzbG93X3BhdGhfZW50ZXIpOwogICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7CiB9CiAK
LXZvaWQgSklUOjplbWl0X29wX2dldF9zY29wZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQ7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BH
ZXRTY29wZT4oKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwogICAgIGVt
aXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKENhbGxGcmFtZVNsb3Q6OmNhbGxlZSwgcmVnVDAp
OwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwgSlNGdW5jdGlvbjo6b2Zmc2V0T2ZTY29wZUNo
YWluKCkpLCByZWdUMCk7CiAgICAgZW1pdFN0b3JlQ2VsbChkc3QsIHJlZ1QwKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRfb3BfY3JlYXRlX3RoaXMoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKK3ZvaWQgSklUOjplbWl0X29wX2NyZWF0ZV90aGlzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaW50IGNhbGxlZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQ7Ci0gICAgV3JpdGVCYXJyaWVyQmFzZTxKU0NlbGw+KiBjYWNoZWRGdW5jdGlv
biA9ICZjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5qc0NlbGw7CisgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDcmVhdGVUaGlzPigpOworICAgIGF1dG8mIG1ldGFk
YXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGludCBjYWxsZWUgPSBi
eXRlY29kZS5jYWxsZWUub2Zmc2V0KCk7CisgICAgV3JpdGVCYXJyaWVyQmFzZTxKU0NlbGw+KiBj
YWNoZWRGdW5jdGlvbiA9ICZtZXRhZGF0YS5jYWNoZWRDYWxsZWU7CiAgICAgUmVnaXN0ZXJJRCBj
YWxsZWVSZWcgPSByZWdUMDsKICAgICBSZWdpc3RlcklEIHJhcmVEYXRhUmVnID0gcmVnVDQ7CiAg
ICAgUmVnaXN0ZXJJRCByZXN1bHRSZWcgPSByZWdUMDsKQEAgLTk2NywxMCArMTAyMywxMCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9jcmVhdGVfdGhpcyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogICAgIGxvYWQzMihBZGRyZXNzKHNjcmF0Y2hSZWcsIEZ1bmN0aW9uUmFyZURhdGE6Om9m
ZnNldE9mT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUoKSArIE9iamVjdEFsbG9jYXRpb25Qcm9maWxl
OjpvZmZzZXRPZklubGluZUNhcGFjaXR5KCkpLCBzY3JhdGNoUmVnKTsKICAgICBlbWl0SW5pdGlh
bGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVnLCBzY3JhdGNoUmVnKTsKICAgICBhZGRTbG93Q2Fz
ZShzbG93Q2FzZXMpOwotICAgIGVtaXRTdG9yZUNlbGwoY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZCwgcmVzdWx0UmVnKTsKKyAgICBlbWl0U3RvcmVDZWxsKGJ5dGVjb2RlLmRzdC5vZmZz
ZXQoKSwgcmVzdWx0UmVnKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfdG9fdGhpcyhjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVG9UaGlzPigpOwogICAgIGF1dG8mIG1ldGFkYXRh
ID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwpAQCAtOTg2LDE3ICsxMDQyLDE5IEBA
IHZvaWQgSklUOjplbWl0X29wX3RvX3RoaXMoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKICAgICBhZGRTbG93Q2FzZShicmFuY2hQdHIoTm90RXF1YWwsIHJlZ1QwLCByZWdUMikpOwog
fQogCi12b2lkIEpJVDo6ZW1pdF9vcF9jaGVja190ZHooSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX2NoZWNrX3Rkeihjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewotICAgIGVtaXRMb2FkVGFnKGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQsIHJlZ1QwKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcENoZWNrVGR6PigpOworICAgIGVtaXRMb2FkVGFnKGJ5dGVjb2RlLnRhcmdl
dC5vZmZzZXQoKSwgcmVnVDApOwogICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDAp
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3N0cnVjdHVyZV9wcm9wZXJ0eShJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3N0cnVjdHVy
ZV9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAg
IGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBiYXNl
ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICBpbnQgZW51bWVyYXRvciA9
IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7CisgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BIYXNTdHJ1Y3R1cmVQcm9wZXJ0eT4oKTsKKyAgICBpbnQg
ZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOworICAgIGludCBiYXNlID0gYnl0ZWNvZGUuYmFz
ZS5vZmZzZXQoKTsKKyAgICBpbnQgZW51bWVyYXRvciA9IGJ5dGVjb2RlLmVudW1lcmF0b3Iub2Zm
c2V0KCk7CiAKICAgICBlbWl0TG9hZFBheWxvYWQoYmFzZSwgcmVnVDApOwogICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlKTsKQEAgLTEwMTIsNyArMTA3MCw3IEBAIHZvaWQgSklU
OjplbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KEJ5
VmFsSW5mbyogYnlWYWxJbmZvLCBSZXR1cm5BZGRyZXNzUHRyIHJldHVybkFkZHJlc3MsIEpJVEFy
cmF5TW9kZSBhcnJheU1vZGUpCiB7Ci0gICAgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biA9ICZtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKClbYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4
XTsKKyAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gbV9jb2RlQmxv
Y2stPmluc3RydWN0aW9ucygpLmF0KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJbmRleCkucHRyKCk7CiAg
ICAgCiAgICAgUGF0Y2hhYmxlSnVtcCBiYWRUeXBlOwogICAgIApAQCAtMTAzNywxMiArMTA5NSwx
NCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoQnlWYWxJbmZv
KiBieVZhbEluZm8sIFJldHVybkFkZHJlc3NQdAogICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBhdGNo
Q2FsbChDb2RlTG9jYXRpb25DYWxsPE5vUHRyVGFnPihNYWNyb0Fzc2VtYmxlckNvZGVQdHI8Tm9Q
dHJUYWc+KHJldHVybkFkZHJlc3MpKSwgRnVuY3Rpb25QdHI8T3BlcmF0aW9uUHRyVGFnPihvcGVy
YXRpb25IYXNJbmRleGVkUHJvcGVydHlHZW5lcmljKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29w
X2hhc19pbmRleGVkX3Byb3BlcnR5KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2
b2lkIEpJVDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kOwotICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZDsKLSAgICBpbnQgcHJvcGVydHkgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5k
OwotICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9IGFycmF5UHJvZmlsZUZvcjxPcEhhc0luZGV4
ZWRQcm9wZXJ0eVNoYXBlPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGF1dG8gYnl0ZWNvZGUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSGFzSW5kZXhlZFByb3BlcnR5PigpOworICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGludCBk
c3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7CisgICAgaW50IGJhc2UgPSBieXRlY29kZS5iYXNl
Lm9mZnNldCgpOworICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLnByb3BlcnR5Lm9mZnNldCgp
OworICAgIEFycmF5UHJvZmlsZSogcHJvZmlsZSA9ICZtZXRhZGF0YS5hcnJheVByb2ZpbGU7CiAg
ICAgQnlWYWxJbmZvKiBieVZhbEluZm8gPSBtX2NvZGVCbG9jay0+YWRkQnlWYWxJbmZvKCk7CiAg
ICAgCiAgICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QwKTsKQEAgLTEwODEsMTMgKzExNDEs
MTQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChC
eVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVPZmZzZXQsIFBhdGNoYWJs
ZUp1bXAoKSwgYmFkVHlwZSwgbW9kZSwgcHJvZmlsZSwgZG9uZSwgbmV4dEhvdFBhdGgpKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKIHsKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCi0gICAgaW50IGRz
dCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IGJhc2UgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGludCBwcm9wZXJ0eSA9IGN1cnJlbnRJ
bnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+KCk7CisgICAgaW50IGRzdCA9IGJ5dGVj
b2RlLmRzdC5vZmZzZXQoKTsKKyAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLmJhc2Uub2Zmc2V0KCk7
CisgICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUucHJvcGVydHkub2Zmc2V0KCk7CiAgICAgQnlW
YWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVj
dGlvbkluZGV4XS5ieVZhbEluZm87CiAKICAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CkBA
IC0xMTAxLDEyICsxMTYyLDEzIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9w
cm9wZXJ0eShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0CiAgICAgbV9ieVZh
bEluc3RydWN0aW9uSW5kZXgrKzsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2RpcmVjdF9w
bmFtZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2RpcmVjdF9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGlu
dCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICBpbnQgaW5kZXgg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOwotICAgIGludCBlbnVtZXJhdG9yID0g
Y3VycmVudEluc3RydWN0aW9uWzVdLnUub3BlcmFuZDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEdldERpcmVjdFBuYW1lPigpOworICAgIGludCBkc3QgPSBi
eXRlY29kZS5kc3Qub2Zmc2V0KCk7CisgICAgaW50IGJhc2UgPSBieXRlY29kZS5iYXNlLm9mZnNl
dCgpOworICAgIGludCBpbmRleCA9IGJ5dGVjb2RlLmluZGV4Lm9mZnNldCgpOworICAgIGludCBl
bnVtZXJhdG9yID0gYnl0ZWNvZGUuZW51bWVyYXRvci5vZmZzZXQoKTsKIAogICAgIC8vIENoZWNr
IHRoYXQgYmFzZSBpcyBhIGNlbGwKICAgICBlbWl0TG9hZFBheWxvYWQoYmFzZSwgcmVnVDApOwpA
QCAtMTEzNywxNSArMTE5OSwxNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1l
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgbG9hZDMyKEJhc2VJbmRleChy
ZWdUMCwgcmVnVDIsIFRpbWVzRWlnaHQsIG9mZnNldE9mRmlyc3RQcm9wZXJ0eSArIE9CSkVDVF9P
RkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0cy5wYXlsb2FkKSksIHJlZ1QwKTsKICAgICAKICAgICBk
b25lLmxpbmsodGhpcyk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOworICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKICAgICBl
bWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9lbnVt
ZXJhdG9yX3N0cnVjdHVyZV9wbmFtZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQor
dm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1cmVfcG5hbWUoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBpbnQgZHN0ID0gY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgZW51bWVyYXRvciA9IGN1cnJlbnRJbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgaW50IGluZGV4ID0gY3VycmVudEluc3RydWN0aW9uWzNd
LnUub3BlcmFuZDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEVudW1lcmF0b3JTdHJ1Y3R1cmVQbmFtZT4oKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0
Lm9mZnNldCgpOworICAgIGludCBlbnVtZXJhdG9yID0gYnl0ZWNvZGUuZW51bWVyYXRvci5vZmZz
ZXQoKTsKKyAgICBpbnQgaW5kZXggPSBieXRlY29kZS5pbmRleC5vZmZzZXQoKTsKIAogICAgIGVt
aXRMb2FkUGF5bG9hZChpbmRleCwgcmVnVDApOwogICAgIGVtaXRMb2FkUGF5bG9hZChlbnVtZXJh
dG9yLCByZWdUMSk7CkBAIC0xMTY1LDExICsxMjI4LDEyIEBAIHZvaWQgSklUOjplbWl0X29wX2Vu
dW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDIsIHJlZ1QwKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRf
b3BfZW51bWVyYXRvcl9nZW5lcmljX3BuYW1lKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCit2b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dlbmVyaWNfcG5hbWUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBpbnQgZHN0ID0gY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgZW51bWVyYXRvciA9IGN1cnJlbnRJbnN0
cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgaW50IGluZGV4ID0gY3VycmVudEluc3RydWN0aW9u
WzNdLnUub3BlcmFuZDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEVudW1lcmF0b3JHZW5lcmljUG5hbWU+KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRz
dC5vZmZzZXQoKTsKKyAgICBpbnQgZW51bWVyYXRvciA9IGJ5dGVjb2RlLmVudW1lcmF0b3Iub2Zm
c2V0KCk7CisgICAgaW50IGluZGV4ID0gYnl0ZWNvZGUuaW5kZXgub2Zmc2V0KCk7CiAKICAgICBl
bWl0TG9hZFBheWxvYWQoaW5kZXgsIHJlZ1QwKTsKICAgICBlbWl0TG9hZFBheWxvYWQoZW51bWVy
YXRvciwgcmVnVDEpOwpAQCAtMTE4OSwxMCArMTI1MywxMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9l
bnVtZXJhdG9yX2dlbmVyaWNfcG5hbWUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
ICAgICBlbWl0U3RvcmUoZHN0LCByZWdUMiwgcmVnVDApOwogfQogCi12b2lkIEpJVDo6ZW1pdF9v
cF9wcm9maWxlX3R5cGUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklU
OjplbWl0X29wX3Byb2ZpbGVfdHlwZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewotICAgIFR5cGVMb2NhdGlvbiogY2FjaGVkVHlwZUxvY2F0aW9uID0gY3VycmVudElu
c3RydWN0aW9uWzJdLnUubG9jYXRpb247Ci0gICAgaW50IHZhbHVlVG9Qcm9maWxlID0gY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFByb2ZpbGVUeXBlPigpOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0
ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIFR5cGVMb2NhdGlvbiogY2FjaGVkVHlw
ZUxvY2F0aW9uID0gbWV0YWRhdGEudHlwZUxvY2F0aW9uOworICAgIGludCB2YWx1ZVRvUHJvZmls
ZSA9IGJ5dGVjb2RlLnRhcmdldC5vZmZzZXQoKTsKIAogICAgIC8vIExvYWQgcGF5bG9hZCBpbiBU
MC4gTG9hZCB0YWcgaW4gVDMuCiAgICAgZW1pdExvYWRQYXlsb2FkKHZhbHVlVG9Qcm9maWxlLCBy
ZWdUMCk7CkBAIC0xMjU0LDMzICsxMzIwLDM0IEBAIHZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVf
dHlwZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGp1bXBUb0VuZC5saW5r
KHRoaXMpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fcHJvbG9n
dWUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX2xv
Z19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewogICAgIHVwZGF0ZVRvcENhbGxGcmFtZSgpOwogICAgIHN0YXRpY19hc3NlcnQo
bm9uQXJnR1BSMCAhPSByZWdUMCAmJiBub25BcmdHUFIwICE9IHJlZ1QyLCAid2Ugd2lsbCBoYXZl
IHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcExvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZT4oKTsKICAgICBHUFJS
ZWcgc2hhZG93UGFja2V0UmVnID0gcmVnVDA7CiAgICAgR1BSUmVnIHNjcmF0Y2gxUmVnID0gbm9u
QXJnR1BSMDsgLy8gVGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3VtZW50IHJlZ2lzdGVyLgogICAgIEdQ
UlJlZyBzY3JhdGNoMlJlZyA9IHJlZ1QyOwogICAgIGVuc3VyZVNoYWRvd0NoaWNrZW5QYWNrZXQo
KnZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcsIHNjcmF0Y2gyUmVnKTsKIAogICAg
IHNjcmF0Y2gxUmVnID0gcmVnVDQ7Ci0gICAgZW1pdExvYWRQYXlsb2FkKGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQsIHJlZ1QzKTsKKyAgICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUu
c2NvcGUub2Zmc2V0KCksIHJlZ1QzKTsKICAgICBsb2dTaGFkb3dDaGlja2VuUHJvbG9ndWVQYWNr
ZXQoc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgcmVnVDMpOwogfQogCi12b2lkIEpJVDo6
ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbChJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2VuX3RhaWwoY29uc3Qg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICB1cGRhdGVUb3BDYWxsRnJh
bWUoKTsKICAgICBzdGF0aWNfYXNzZXJ0KG5vbkFyZ0dQUjAgIT0gcmVnVDAgJiYgbm9uQXJnR1BS
MCAhPSByZWdUMiwgIndlIHdpbGwgaGF2ZSBwcm9ibGVtcyBpZiB0aGlzIGlzIHRydWUuIik7Cisg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BMb2dTaGFkb3dDaGlj
a2VuVGFpbD4oKTsKICAgICBHUFJSZWcgc2hhZG93UGFja2V0UmVnID0gcmVnVDA7CiAgICAgR1BS
UmVnIHNjcmF0Y2gxUmVnID0gbm9uQXJnR1BSMDsgLy8gVGhpcyBtdXN0IGJlIGEgbm9uLWFyZ3Vt
ZW50IHJlZ2lzdGVyLgogICAgIEdQUlJlZyBzY3JhdGNoMlJlZyA9IHJlZ1QyOwogICAgIGVuc3Vy
ZVNoYWRvd0NoaWNrZW5QYWNrZXQoKnZtKCksIHNoYWRvd1BhY2tldFJlZywgc2NyYXRjaDFSZWcs
IHNjcmF0Y2gyUmVnKTsKLQotICAgIGVtaXRMb2FkUGF5bG9hZChjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kLCByZWdUMik7Ci0gICAgZW1pdExvYWRUYWcoY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZCwgcmVnVDEpOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS50aGlz
VmFsdWUub2Zmc2V0KCksIHJlZ1QyKTsKKyAgICBlbWl0TG9hZFRhZyhieXRlY29kZS50aGlzVmFs
dWUub2Zmc2V0KCksIHJlZ1QxKTsKICAgICBKU1ZhbHVlUmVncyB0aGlzUmVncyhyZWdUMSwgcmVn
VDIpOwotICAgIGVtaXRMb2FkUGF5bG9hZChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
LCByZWdUMyk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLnNjb3BlLm9mZnNldCgpLCBy
ZWdUMyk7CiAgICAgbG9nU2hhZG93Q2hpY2tlblRhaWxQYWNrZXQoc2hhZG93UGFja2V0UmVnLCB0
aGlzUmVncywgcmVnVDMsIG1fY29kZUJsb2NrLCBDYWxsU2l0ZUluZGV4KGN1cnJlbnRJbnN0cnVj
dGlvbikpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBy
b3BlcnR5QWNjZXNzMzJfNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2VzczMyXzY0LmNwcAppbmRleCA5MTI2ZjY5NjA3YmJiMDQ1MDg1YTYxOTE2Y2JkNTZj
MjliZjRhOTRiLi40MGFjNGYzZmM2NmU4NWJhZjlmMjlhM2QxYTM2M2VmYTg4MWYwOTA1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82
NC5jcHAKQEAgLTQ3LDUwICs0Nyw1NCBAQAogCiBuYW1lc3BhY2UgSlNDIHsKICAgICAKLXZvaWQg
SklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKK3ZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHByb3BlcnR5ID0gY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZDsKLSAgICBpbnQgb3B0aW9ucyA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51
Lm9wZXJhbmQ7Ci0gICAgaW50IGdldHRlciA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJh
bmQ7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRHZXR0
ZXJCeUlkPigpOworICAgIGludCBiYXNlID0gYnl0ZWNvZGUuYmFzZS5vZmZzZXQoKTsKKyAgICBp
bnQgcHJvcGVydHkgPSBieXRlY29kZS5wcm9wZXJ0eTsKKyAgICBpbnQgb3B0aW9ucyA9IGJ5dGVj
b2RlLmF0dHJpYnV0ZXM7CisgICAgaW50IGdldHRlciA9IGJ5dGVjb2RlLmFjY2Vzc29yLm9mZnNl
dCgpOwogCiAgICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QxKTsKICAgICBlbWl0TG9hZFBh
eWxvYWQoZ2V0dGVyLCByZWdUMyk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0
ZXJCeUlkLCByZWdUMSwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpLmltcGwoKSwg
b3B0aW9ucywgcmVnVDMpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVyX2J5X2lk
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
c2V0dGVyX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0g
ICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBw
cm9wZXJ0eSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgaW50IG9wdGlv
bnMgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgIGludCBzZXR0ZXIgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0U2V0dGVyQnlJZD4oKTsKKyAgICBpbnQgYmFzZSA9IGJ5
dGVjb2RlLmJhc2Uub2Zmc2V0KCk7CisgICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUucHJvcGVy
dHk7CisgICAgaW50IG9wdGlvbnMgPSBieXRlY29kZS5hdHRyaWJ1dGVzOworICAgIGludCBzZXR0
ZXIgPSBieXRlY29kZS5hY2Nlc3Nvci5vZmZzZXQoKTsKIAogICAgIGVtaXRMb2FkUGF5bG9hZChi
YXNlLCByZWdUMSk7CiAgICAgZW1pdExvYWRQYXlsb2FkKHNldHRlciwgcmVnVDMpOwogICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlJZCwgcmVnVDEsIG1fY29kZUJsb2NrLT5p
ZGVudGlmaWVyKHByb3BlcnR5KS5pbXBsKCksIG9wdGlvbnMsIHJlZ1QzKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX3B1dF9nZXR0ZXJfc2V0dGVyX2J5X2lkKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaW50IGJhc2UgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBwcm9wZXJ0eSA9IGN1cnJl
bnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgaW50IGF0dHJpYnV0ZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgaW50IGdldHRlciA9IGN1cnJlbnRJbnN0cnVj
dGlvbls0XS51Lm9wZXJhbmQ7Ci0gICAgaW50IHNldHRlciA9IGN1cnJlbnRJbnN0cnVjdGlvbls1
XS51Lm9wZXJhbmQ7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BQdXRHZXR0ZXJTZXR0ZXJCeUlkPigpOworICAgIGludCBiYXNlID0gYnl0ZWNvZGUuYmFzZS5v
ZmZzZXQoKTsKKyAgICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5wcm9wZXJ0eTsKKyAgICBpbnQg
YXR0cmlidXRlcyA9IGJ5dGVjb2RlLmF0dHJpYnV0ZXM7CisgICAgaW50IGdldHRlciA9IGJ5dGVj
b2RlLmdldHRlci5vZmZzZXQoKTsKKyAgICBpbnQgc2V0dGVyID0gYnl0ZWNvZGUuc2V0dGVyLm9m
ZnNldCgpOwogCiAgICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QxKTsKICAgICBlbWl0TG9h
ZFBheWxvYWQoZ2V0dGVyLCByZWdUMyk7CiAgICAgZW1pdExvYWRQYXlsb2FkKHNldHRlciwgcmVn
VDQpOwotICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCByZWdUMSwg
bV9jb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRlLCByZWdU
MywgcmVnVDQpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0R2V0dGVyU2V0dGVyLCBy
ZWdUMSwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVydHkpLmltcGwoKSwgYXR0cmlidXRl
cywgcmVnVDMsIHJlZ1Q0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92
YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX3B1
dF9nZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
Ci0gICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGlu
dCBwcm9wZXJ0eSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgaW50MzJf
dCBhdHRyaWJ1dGVzID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICBpbnQg
Z2V0dGVyID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZDsKKyAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlckJ5VmFsPigpOworICAgIGlu
dCBiYXNlID0gYnl0ZWNvZGUuYmFzZS5vZmZzZXQoKTsKKyAgICBpbnQgcHJvcGVydHkgPSBieXRl
Y29kZS5wcm9wZXJ0eS5vZmZzZXQoKTsKKyAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBieXRlY29k
ZS5hdHRyaWJ1dGVzOworICAgIGludCBnZXR0ZXIgPSBieXRlY29kZS5hY2Nlc3Nvci5vZmZzZXQo
KTsKIAogICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMik7CiAgICAgZW1pdExvYWQocHJv
cGVydHksIHJlZ1QxLCByZWdUMCk7CkBAIC05OCw0MyArMTAyLDQ4IEBAIHZvaWQgSklUOjplbWl0
X29wX3B1dF9nZXR0ZXJfYnlfdmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJCeVZhbCwgcmVnVDIsIEpTVmFsdWVS
ZWdzKHJlZ1QxLCByZWdUMCksIGF0dHJpYnV0ZXMsIHJlZ1QzKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X3NldHRlcl9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
K3ZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kOwotICAgIGludCBwcm9wZXJ0eSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQ7Ci0gICAgaW50MzJfdCBhdHRyaWJ1dGVzID0gY3VycmVudEluc3RydWN0aW9uWzNd
LnUub3BlcmFuZDsKLSAgICBpbnQgZ2V0dGVyID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUub3Bl
cmFuZDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFNl
dHRlckJ5VmFsPigpOworICAgIGludCBiYXNlID0gYnl0ZWNvZGUuYmFzZS5vZmZzZXQoKTsKKyAg
ICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5wcm9wZXJ0eS5vZmZzZXQoKTsKKyAgICBpbnQzMl90
IGF0dHJpYnV0ZXMgPSBieXRlY29kZS5hdHRyaWJ1dGVzOworICAgIGludCBzZXR0ZXIgPSBieXRl
Y29kZS5hY2Nlc3Nvci5vZmZzZXQoKTsKIAogICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCByZWdU
Mik7CiAgICAgZW1pdExvYWQocHJvcGVydHksIHJlZ1QxLCByZWdUMCk7Ci0gICAgZW1pdExvYWRQ
YXlsb2FkKGdldHRlciwgcmVnVDMpOworICAgIGVtaXRMb2FkUGF5bG9hZChzZXR0ZXIsIHJlZ1Qz
KTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dFNldHRlckJ5VmFsLCByZWdUMiwgSlNW
YWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgYXR0cmlidXRlcywgcmVnVDMpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdF9vcF9kZWxfYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3Zv
aWQgSklUOjplbWl0X29wX2RlbF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
OwotICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICBp
bnQgcHJvcGVydHkgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVsQnlJZD4oKTsKKyAgICBpbnQg
ZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOworICAgIGludCBiYXNlID0gYnl0ZWNvZGUuYmFz
ZS5vZmZzZXQoKTsKKyAgICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5wcm9wZXJ0eTsKICAgICBl
bWl0TG9hZChiYXNlLCByZWdUMSwgcmVnVDApOwogICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9u
RGVsZXRlQnlJZEpTUmVzdWx0LCBkc3QsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKHByb3BlcnR5KS5pbXBsKCkpOwogfQogCi12b2lkIEpJVDo6ZW1p
dF9vcF9kZWxfYnlfdmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJ
VDo6ZW1pdF9vcF9kZWxfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0g
ICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGludCBw
cm9wZXJ0eSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeVZhbD4oKTsKKyAgICBpbnQgZHN0
ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOworICAgIGludCBiYXNlID0gYnl0ZWNvZGUuYmFzZS5v
ZmZzZXQoKTsKKyAgICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5wcm9wZXJ0eS5vZmZzZXQoKTsK
ICAgICBlbWl0TG9hZDIoYmFzZSwgcmVnVDEsIHJlZ1QwLCBwcm9wZXJ0eSwgcmVnVDMsIHJlZ1Qy
KTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkRlbGV0ZUJ5VmFsSlNSZXN1bHQsIGRzdCwg
SlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVnVDMsIHJlZ1QyKSk7CiB9
CiAKLXZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZDsKLSAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQ7Ci0gICAgaW50IHByb3BlcnR5ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFu
ZDsKLSAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSBhcnJheVByb2ZpbGVGb3I8T3BHZXRCeVZh
bFNoYXBlPihjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5v
ZmZzZXQoKTsKKyAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLmJhc2Uub2Zmc2V0KCk7CisgICAgaW50
IHByb3BlcnR5ID0gYnl0ZWNvZGUucHJvcGVydHkub2Zmc2V0KCk7CisgICAgQXJyYXlQcm9maWxl
KiBwcm9maWxlID0gJm1ldGFkYXRhLmFycmF5UHJvZmlsZTsKICAgICBCeVZhbEluZm8qIGJ5VmFs
SW5mbyA9IG1fY29kZUJsb2NrLT5hZGRCeVZhbEluZm8oKTsKIAogICAgIGVtaXRMb2FkMihiYXNl
LCByZWdUMSwgcmVnVDAsIHByb3BlcnR5LCByZWdUMywgcmVnVDIpOwpAQCAtMTc3LDcgKzE4Niw3
IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKICAgICAgICAgcmVzdWx0T0subGluayh0aGlzKTsKICAgICB9CiAKLSAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwogICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdU
MCk7CiAKICAgICBMYWJlbCBuZXh0SG90UGF0aCA9IGxhYmVsKCk7CkBAIC0xODUsMTcgKzE5NCwx
OCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfdmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiAgICAgbV9ieVZhbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxh
dGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5dGVjb2RlT2Zmc2V0LCBub3RJbmRleCwgYmFkVHlwZSwg
bW9kZSwgcHJvZmlsZSwgZG9uZSwgbmV4dEhvdFBhdGgpKTsKIH0KIAotSklUR2V0QnlJZEdlbmVy
YXRvciBKSVQ6OmVtaXRHZXRCeVZhbFdpdGhDYWNoZWRJZChCeVZhbEluZm8qIGJ5VmFsSW5mbywg
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCBKdW1wJiBmYXN0RG9uZUNhc2UsIEp1bXAmIHNsb3dEb25lQ2FzZSwgSnVtcExpc3Qm
IHNsb3dDYXNlcykKK0pJVEdldEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0R2V0QnlWYWxXaXRoQ2Fj
aGVkSWQoQnlWYWxJbmZvKiBieVZhbEluZm8sIE9wR2V0QnlWYWwgYnl0ZWNvZGUsIGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSnVtcCYgZmFzdERvbmVDYXNlLCBKdW1wJiBzbG93RG9u
ZUNhc2UsIEp1bXBMaXN0JiBzbG93Q2FzZXMpCiB7Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0KICAgICAvLyBiYXNlOiB0YWcocmVnVDEpLCBwYXlsb2Fk
KHJlZ1QwKQogICAgIC8vIHByb3BlcnR5OiB0YWcocmVnVDMpLCBwYXlsb2FkKHJlZ1QyKQogICAg
IC8vIHNjcmF0Y2g6IHJlZ1Q0CiAKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgp
OworCiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdENlbGwocmVnVDMpKTsKICAgICBl
bWl0QnlWYWxJZGVudGlmaWVyQ2hlY2soYnlWYWxJbmZvLCByZWdUMiwgcmVnVDQsIHByb3BlcnR5
TmFtZSwgc2xvd0Nhc2VzKTsKIAorICAgIGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoYnlWYWxJbmZvLT5ieXRlY29k
ZUluZGV4KS5wdHIoKTsKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yIGdlbigKICAgICAgICAgbV9j
b2RlQmxvY2ssIENvZGVPcmlnaW4obV9ieXRlY29kZU9mZnNldCksIENhbGxTaXRlSW5kZXgoY3Vy
cmVudEluc3RydWN0aW9uKSwgUmVnaXN0ZXJTZXQ6OnN0dWJVbmF2YWlsYWJsZVJlZ2lzdGVycygp
LAogICAgICAgICBwcm9wZXJ0eU5hbWUuaW1wbCgpLCBKU1ZhbHVlUmVnczo6cGF5bG9hZE9ubHko
cmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBBY2Nlc3NUeXBlOjpHZXQpOwpAQCAt
MjA2LDE4ICsyMTYsMTkgQEAgSklUR2V0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRHZXRCeVZhbFdp
dGhDYWNoZWRJZChCeVZhbEluZm8qIGJ5VmFsSW5mbywgSW5zdHJ1Y3QKICAgICBMYWJlbCBjb2xk
UGF0aEJlZ2luID0gbGFiZWwoKTsKICAgICBnZW4uc2xvd1BhdGhKdW1wKCkubGluayh0aGlzKTsK
IAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShvcGVyYXRpb25HZXRC
eUlkT3B0aW1pemUsIGRzdCwgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCksIHByb3BlcnR5TmFtZS5pbXBsKCkpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5
SWRPcHRpbWl6ZSwgZHN0LCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1Qw
KSwgcHJvcGVydHlOYW1lLmltcGwoKSk7CiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xk
UGF0aEJlZ2luLCBjYWxsKTsKICAgICBzbG93RG9uZUNhc2UgPSBqdW1wKCk7CiAKICAgICByZXR1
cm4gZ2VuOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dldF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKIHsKLSAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAg
ICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHBy
b3BlcnR5ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5VmFsPigpOworICAgIGludCBkc3Qg
PSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7CisgICAgaW50IGJhc2UgPSBieXRlY29kZS5iYXNlLm9m
ZnNldCgpOworICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLnByb3BlcnR5Lm9mZnNldCgpOwog
ICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9ieVZhbENvbXBpbGF0aW9uSW5mb1ttX2J5VmFs
SW5zdHJ1Y3Rpb25JbmRleF0uYnlWYWxJbmZvOwogCiAgICAgbGlua1Nsb3dDYXNlSWZOb3RKU0Nl
bGwoaXRlciwgYmFzZSk7IC8vIGJhc2UgY2VsbCBjaGVjawpAQCAtMjI5LDcgKzI0MCw3IEBAIHZv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzCiAgICAgZW1pdE5ha2VkQ2FsbChDb2RlTG9jYXRpb25MYWJl
bDxOb1B0clRhZz4obV92bS0+Z2V0Q1RJU3R1YihzdHJpbmdHZXRCeVZhbEdlbmVyYXRvcikucmV0
YWdnZWRDb2RlPE5vUHRyVGFnPigpKSk7CiAgICAgSnVtcCBmYWlsZWQgPSBicmFuY2hUZXN0UHRy
KFplcm8sIHJlZ1QwKTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmVnVDApOwotICAgIGVtaXRK
dW1wU2xvd1RvSG90KGp1bXAoKSwgT1BDT0RFX0xFTkdUSChvcF9nZXRfYnlfdmFsKSk7CisgICAg
ZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUoKSk7CiAg
ICAgZmFpbGVkLmxpbmsodGhpcyk7CiAgICAgbm90U3RyaW5nLmxpbmsodGhpcyk7CiAgICAgbm9u
Q2VsbC5saW5rKHRoaXMpOwpAQCAtMjQ3LDE0ICsyNTgsMjIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXMKICAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4
XS5yZXR1cm5BZGRyZXNzID0gY2FsbDsKICAgICBtX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleCsrOwog
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKK30KKwordm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X2J5X3ZhbF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKK3sKKyAgICBlbWl0X29wX3B1dF9ieV92YWw8T3BQdXRCeVZhbERpcmVjdD4oY3VycmVudElu
c3RydWN0aW9uKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQordGVtcGxhdGU8dHlwZW5hbWUgT3A+Cit2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7Ci0gICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAg
IGludCBwcm9wZXJ0eSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgQXJy
YXlQcm9maWxlKiBwcm9maWxlID0gYXJyYXlQcm9maWxlRm9yPE9wUHV0QnlWYWxTaGFwZT4oY3Vy
cmVudEluc3RydWN0aW9uKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcD4oKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKTsKKyAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLmJhc2Uub2Zmc2V0KCk7CisgICAgaW50
IHByb3BlcnR5ID0gYnl0ZWNvZGUucHJvcGVydHkub2Zmc2V0KCk7CisgICAgQXJyYXlQcm9maWxl
KiBwcm9maWxlID0gJm1ldGFkYXRhLmFycmF5UHJvZmlsZTsKICAgICBCeVZhbEluZm8qIGJ5VmFs
SW5mbyA9IG1fY29kZUJsb2NrLT5hZGRCeVZhbEluZm8oKTsKICAgICAKICAgICBlbWl0TG9hZDIo
YmFzZSwgcmVnVDEsIHJlZ1QwLCBwcm9wZXJ0eSwgcmVnVDMsIHJlZ1QyKTsKQEAgLTI3NCwxNiAr
MjkzLDE2IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKICAgICBKSVRBcnJheU1vZGUgbW9kZSA9IGNob29zZUFycmF5TW9kZShw
cm9maWxlKTsKICAgICBzd2l0Y2ggKG1vZGUpIHsKICAgICBjYXNlIEpJVEludDMyOgotICAgICAg
ICBzbG93Q2FzZXMgPSBlbWl0SW50MzJQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5
cGUpOworICAgICAgICBzbG93Q2FzZXMgPSBlbWl0SW50MzJQdXRCeVZhbChieXRlY29kZSwgYmFk
VHlwZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSklURG91YmxlOgotICAgICAgICBzbG93
Q2FzZXMgPSBlbWl0RG91YmxlUHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsK
KyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdERvdWJsZVB1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBl
KTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBKSVRDb250aWd1b3VzOgotICAgICAgICBzbG93
Q2FzZXMgPSBlbWl0Q29udGlndW91c1B1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlw
ZSk7CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRDb250aWd1b3VzUHV0QnlWYWwoYnl0ZWNvZGUs
IGJhZFR5cGUpOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEpJVEFycmF5U3RvcmFnZToKLSAg
ICAgICAgc2xvd0Nhc2VzID0gZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVj
dGlvbiwgYmFkVHlwZSk7CisgICAgICAgIHNsb3dDYXNlcyA9IGVtaXRBcnJheVN0b3JhZ2VQdXRC
eVZhbChieXRlY29kZSwgYmFkVHlwZSk7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CiAg
ICAgICAgIENSQVNIKCk7CkBAIC0yOTgsMTEgKzMxNywxMyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfYnlfdmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgbV9ieVZhbENv
bXBpbGF0aW9uSW5mby5hcHBlbmQoQnlWYWxDb21waWxhdGlvbkluZm8oYnlWYWxJbmZvLCBtX2J5
dGVjb2RlT2Zmc2V0LCBub3RJbmRleCwgYmFkVHlwZSwgbW9kZSwgcHJvZmlsZSwgZG9uZSwgZG9u
ZSkpOwogfQogCi1KSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlW
YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlw
ZSwgSW5kZXhpbmdUeXBlIGluZGV4aW5nU2hhcGUpCit0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+CitK
SVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEdlbmVyaWNDb250aWd1b3VzUHV0QnlWYWwoT3AgYnl0ZWNv
ZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5cGUsIEluZGV4aW5nVHlwZSBpbmRleGluZ1NoYXBlKQog
ewotICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBp
bnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgIEFycmF5UHJv
ZmlsZSogcHJvZmlsZSA9IGFycmF5UHJvZmlsZUZvcjxPcFB1dEJ5VmFsU2hhcGU+KGN1cnJlbnRJ
bnN0cnVjdGlvbik7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7CisgICAgaW50IGJhc2UgPSBieXRlY29kZS5iYXNlLm9mZnNldCgpOworICAgIGlu
dCB2YWx1ZSA9IGJ5dGVjb2RlLnZhbHVlLm9mZnNldCgpOworICAgIEFycmF5UHJvZmlsZSogcHJv
ZmlsZSA9ICZtZXRhZGF0YS5hcnJheVByb2ZpbGU7CiAKICAgICBKdW1wTGlzdCBzbG93Q2FzZXM7
CiAgICAgCkBAIC0zNTcsMTEgKzM3OCwxMyBAQCBKSVQ6Okp1bXBMaXN0IEpJVDo6ZW1pdEdlbmVy
aWNDb250aWd1b3VzUHV0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbgogICAg
IHJldHVybiBzbG93Q2FzZXM7CiB9CiAKLUpJVDo6SnVtcExpc3QgSklUOjplbWl0QXJyYXlTdG9y
YWdlUHV0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUGF0Y2hhYmxlSnVt
cCYgYmFkVHlwZSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK0pJVDo6SnVtcExpc3QgSklUOjpl
bWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoT3AgYnl0ZWNvZGUsIFBhdGNoYWJsZUp1bXAmIGJhZFR5
cGUpCiB7Ci0gICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwot
ICAgIGludCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgQXJy
YXlQcm9maWxlKiBwcm9maWxlID0gYXJyYXlQcm9maWxlRm9yPE9wUHV0QnlWYWxTaGFwZT4oY3Vy
cmVudEluc3RydWN0aW9uKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKKyAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLmJhc2Uub2Zmc2V0KCk7Cisg
ICAgaW50IHZhbHVlID0gYnl0ZWNvZGUudmFsdWUub2Zmc2V0KCk7CisgICAgQXJyYXlQcm9maWxl
KiBwcm9maWxlID0gJm1ldGFkYXRhLmFycmF5UHJvZmlsZTsKIAogICAgIEp1bXBMaXN0IHNsb3dD
YXNlczsKICAgICAKQEAgLTM5NCwxMyArNDE3LDE0IEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0
QXJyYXlTdG9yYWdlUHV0QnlWYWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgUGF0
CiAgICAgcmV0dXJuIHNsb3dDYXNlczsKIH0KIAotSklUUHV0QnlJZEdlbmVyYXRvciBKSVQ6OmVt
aXRQdXRCeVZhbFdpdGhDYWNoZWRJZChCeVZhbEluZm8qIGJ5VmFsSW5mbywgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgUHV0S2luZCBwdXRLaW5kLCBjb25zdCBJZGVudGlmaWVyJiBw
cm9wZXJ0eU5hbWUsIEp1bXBMaXN0JiBkb25lQ2FzZXMsIEp1bXBMaXN0JiBzbG93Q2FzZXMpCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+CitKSVRQdXRCeUlkR2VuZXJhdG9yIEpJVDo6ZW1pdFB1dEJ5
VmFsV2l0aENhY2hlZElkKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBPcCBieXRlY29kZSwgUHV0S2lu
ZCBwdXRLaW5kLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEp1bXBMaXN0JiBkb25l
Q2FzZXMsIEp1bXBMaXN0JiBzbG93Q2FzZXMpCiB7CiAgICAgLy8gYmFzZTogdGFnKHJlZ1QxKSwg
cGF5bG9hZChyZWdUMCkKICAgICAvLyBwcm9wZXJ0eTogdGFnKHJlZ1QzKSwgcGF5bG9hZChyZWdU
MikKIAotICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAg
ICBpbnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIGludCBi
YXNlID0gYnl0ZWNvZGUuYmFzZS5vZmZzZXQoKTsKKyAgICBpbnQgdmFsdWUgPSBieXRlY29kZS52
YWx1ZS5vZmZzZXQoKTsKIAogICAgIHNsb3dDYXNlcy5hcHBlbmQoYnJhbmNoSWZOb3RDZWxsKHJl
Z1QzKSk7CiAgICAgZW1pdEJ5VmFsSWRlbnRpZmllckNoZWNrKGJ5VmFsSW5mbywgcmVnVDIsIHJl
Z1QyLCBwcm9wZXJ0eU5hbWUsIHNsb3dDYXNlcyk7CkBAIC00MTEsNiArNDM1LDcgQEAgSklUUHV0
QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRQdXRCeVZhbFdpdGhDYWNoZWRJZChCeVZhbEluZm8qIGJ5
VmFsSW5mbywgSW5zdHJ1Y3QKICAgICBlbWl0TG9hZFBheWxvYWQoYmFzZSwgcmVnVDApOwogICAg
IGVtaXRMb2FkKHZhbHVlLCByZWdUMywgcmVnVDIpOwogCisgICAgY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieVZh
bEluZm8tPmJ5dGVjb2RlSW5kZXgpLnB0cigpOwogICAgIEpJVFB1dEJ5SWRHZW5lcmF0b3IgZ2Vu
KAogICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwgQ2Fs
bFNpdGVJbmRleChjdXJyZW50SW5zdHJ1Y3Rpb24pLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxh
YmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCks
IEpTVmFsdWVSZWdzKHJlZ1QzLCByZWdUMiksIHJlZ1QxLCBtX2NvZGVCbG9jay0+ZWNtYU1vZGUo
KSwgcHV0S2luZCk7CkBAIC00MzAsMTggKzQ1NSwyOSBAQCBKSVRQdXRCeUlkR2VuZXJhdG9yIEpJ
VDo6ZW1pdFB1dEJ5VmFsV2l0aENhY2hlZElkKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBJbnN0cnVj
dAogICAgIHJldHVybiBnZW47CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFs
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQogewotICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZDsKLSAgICBpbnQgcHJvcGVydHkgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVy
YW5kOwotICAgIGludCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Cisg
ICAgYm9vbCBpc0RpcmVjdCA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+b3Bjb2RlSUQoKSA9PSBvcF9w
dXRfYnlfdmFsX2RpcmVjdDsKKyAgICBpbnQgYmFzZTsKKyAgICBpbnQgcHJvcGVydHk7CisgICAg
aW50IHZhbHVlOworCisgICAgYXV0byBsb2FkID0gWyZdKGF1dG8gYnl0ZWNvZGUpIHsKKyAgICAg
ICAgYmFzZSA9IGJ5dGVjb2RlLmJhc2Uub2Zmc2V0KCk7CisgICAgICAgIHByb3BlcnR5ID0gYnl0
ZWNvZGUucHJvcGVydHkub2Zmc2V0KCk7CisgICAgICAgIHZhbHVlID0gYnl0ZWNvZGUudmFsdWUu
b2Zmc2V0KCk7CisgICAgfTsKKworICAgIGlmIChpc0RpcmVjdCkKKyAgICAgICAgbG9hZChjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWxEaXJlY3Q+KCkpOworICAgIGVsc2UKKyAgICAg
ICAgbG9hZChjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0QnlWYWw+KCkpOworCiAgICAgQnlW
YWxJbmZvKiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVj
dGlvbkluZGV4XS5ieVZhbEluZm87CiAgICAgCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
ICAgICBMYWJlbCBzbG93UGF0aCA9IGxhYmVsKCk7CiAgICAgCi0gICAgYm9vbCBpc0RpcmVjdCA9
IEludGVycHJldGVyOjpnZXRPcGNvZGVJRChjdXJyZW50SW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKSA9
PSBvcF9wdXRfYnlfdmFsX2RpcmVjdDsKLQogICAgIC8vIFRoZSByZWdpc3RlciBzZWxlY3Rpb24g
YmVsb3cgaXMgY2hvc2VuIHRvIHJlZHVjZSByZWdpc3RlciBzd2FwcGluZyBvbiBBUk0uCiAgICAg
Ly8gU3dhcHBpbmcgc2hvdWxkbid0IGhhcHBlbiBvbiBvdGhlciBwbGF0Zm9ybXMuCiAgICAgZW1p
dExvYWQoYmFzZSwgcmVnVDIsIHJlZ1QxKTsKQEAgLTQ1NCwxMSArNDkwLDEyIEBAIHZvaWQgSklU
OjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzCiAgICAgbV9ieVZhbEluc3RydWN0aW9uSW5kZXgrKzsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kOwotICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50
aWZpZXIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpOworICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wVHJ5R2V0QnlJZD4oKTsKKyAgICBpbnQgZHN0
ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOworICAgIGludCBiYXNlID0gYnl0ZWNvZGUuYmFzZS5v
ZmZzZXQoKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoYnl0ZWNvZGUucHJvcGVydHkpKTsKIAogICAgIGVtaXRMb2FkKGJhc2UsIHJlZ1Qx
LCByZWdUMCk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsK
QEAgLTQ3MCwxNiArNTA3LDE3IEBAIHZvaWQgSklUOjplbWl0X29wX3RyeV9nZXRfYnlfaWQoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1Bh
dGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBwZW5kKGdlbik7CiAgICAgCi0gICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZSgpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDAp
OwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKIHsKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCi0gICAgaW50IHJlc3VsdFZSZWcg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGNvbnN0IElkZW50aWZpZXIq
IGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10u
dS5vcGVyYW5kKSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BUcnlHZXRCeUlkPigpOworICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUuZHN0Lm9mZnNl
dCgpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRp
ZmllcihieXRlY29kZS5wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2Vu
ID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKIApAQCAtNDkxLDExICs1MjksMTIgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX3RyeV9nZXRfYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3cKIH0KIAogCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlf
aWRfZGlyZWN0KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1p
dF9vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0g
ICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihjdXJyZW50SW5z
dHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOworICAgIGludCBkc3QgPSBieXRlY29kZS5k
c3Qub2Zmc2V0KCk7CisgICAgaW50IGJhc2UgPSBieXRlY29kZS5iYXNlLm9mZnNldCgpOworICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5wcm9wZXJ0eSkpOwogCiAgICAgZW1pdExvYWQoYmFzZSwgcmVnVDEsIHJlZ1QwKTsKICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwpAQCAtNTA3LDMyICs1
NDYsMzQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX2RpcmVjdChJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7
CiAgICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2dldF9ieV9pZF9kaXJlY3QoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9nZXRfYnlfaWRfZGlyZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAg
ICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAotICAgIGludCByZXN1bHRWUmVnID0gY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFu
ZCkpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJ
ZERpcmVjdD4oKTsKKyAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsK
KyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIo
Ynl0ZWNvZGUucHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1f
Z2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgrK107CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luID0g
bGFiZWwoKTsKIAotICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShvcGVy
YXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUsIHJlc3VsdFZSZWcsIGdlbi5zdHViSW5mbygpLCBK
U1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBpZGVudC0+aW1wbCgpKTsKKyAgICBDYWxsIGNhbGwg
PSBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
LCBvcGVyYXRpb25HZXRCeUlkRGlyZWN0T3B0aW1pemUsIHJlc3VsdFZSZWcsIGdlbi5zdHViSW5m
bygpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBpZGVudC0+aW1wbCgpKTsKIAogICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKIAotdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKLSAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZDsKLSAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGN1cnJl
bnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWQ+KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRz
dC5vZmZzZXQoKTsKKyAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLmJhc2Uub2Zmc2V0KCk7CisgICAg
Y29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVj
b2RlLnByb3BlcnR5KSk7CiAgICAgCiAgICAgZW1pdExvYWQoYmFzZSwgcmVnVDEsIHJlZ1QwKTsK
ICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwpAQCAtNTQ3LDMy
ICs1ODgsMzQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAg
ICBtX2dldEJ5SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgp
OworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgbGlua0FsbFNsb3dDYXNl
cyhpdGVyKTsKIAotICAgIGludCByZXN1bHRWUmVnID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZDsKLSAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlk
ZW50aWZpZXIoY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZCkpOworICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlJZD4oKTsKKyAgICBpbnQgcmVz
dWx0VlJlZyA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBp
ZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUucHJvcGVydHkpKTsKIAog
ICAgIEpJVEdldEJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1fZ2V0QnlJZHNbbV9nZXRCeUlkSW5kZXgr
K107CiAgICAgCiAgICAgTGFiZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAgICAgCi0gICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG9wZXJhdGlvbkdldEJ5SWRPcHRp
bWl6ZSwgcmVzdWx0VlJlZywgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCksIGlkZW50LT5pbXBsKCkpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJv
ZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRPcHRp
bWl6ZSwgcmVzdWx0VlJlZywgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdU
MCksIGlkZW50LT5pbXBsKCkpOwogICAgIAogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29s
ZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF93aXRo
X3RoaXMoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29w
X2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKLSAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAg
ICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHRo
aXNWUmVnID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoY3VycmVudEluc3RydWN0
aW9uWzRdLnUub3BlcmFuZCkpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0QnlJZFdpdGhUaGlzPigpOworICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qu
b2Zmc2V0KCk7CisgICAgaW50IGJhc2UgPSBieXRlY29kZS5iYXNlLm9mZnNldCgpOworICAgIGlu
dCB0aGlzVlJlZyA9IGJ5dGVjb2RlLnRoaXNWYWx1ZS5vZmZzZXQoKTsKKyAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUucHJvcGVy
dHkpKTsKICAgICAKICAgICBlbWl0TG9hZChiYXNlLCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRM
b2FkKHRoaXNWUmVnLCByZWdUNCwgcmVnVDMpOwpAQCAtNTg2LDM1ICs2MjksMzggQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAgbV9nZXRC
eUlkc1dpdGhUaGlzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgp
OworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxv
Y2spKTsKICAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6
OmVtaXRTbG93X29wX2dldF9ieV9pZF93aXRoX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsK
ICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCi0gICAgaW50IHJlc3VsdFZSZWcgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVy
YW5kKSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRC
eUlkV2l0aFRoaXM+KCk7CisgICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5kc3Qub2Zmc2V0
KCk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLnByb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkV2l0aFRoaXNHZW5lcmF0
b3ImIGdlbiA9IG1fZ2V0QnlJZHNXaXRoVGhpc1ttX2dldEJ5SWRXaXRoVGhpc0luZGV4KytdOwog
ICAgIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogICAgIAotICAgIENhbGwg
Y2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShvcGVyYXRpb25HZXRCeUlkV2l0aFRoaXNP
cHRpbWl6ZSwgcmVzdWx0VlJlZywgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1QxLCBy
ZWdUMCksIEpTVmFsdWVSZWdzKHJlZ1Q0LCByZWdUMyksIGlkZW50LT5pbXBsKCkpOworICAgIENh
bGwgY2FsbCA9IGNhbGxPcGVyYXRpb25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplLCByZXN1bHRWUmVnLCBn
ZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDQsIHJlZ1QzKSwgaWRlbnQtPmltcGwoKSk7CiAgICAgCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5
X2lkKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICAv
LyBJbiBvcmRlciB0byBiZSBhYmxlIHRvIHBhdGNoIGJvdGggdGhlIFN0cnVjdHVyZSwgYW5kIHRo
ZSBvYmplY3Qgb2Zmc2V0LCB3ZSBzdG9yZSBvbmUgcG9pbnRlciwKICAgICAvLyB0byBqdXN0IGFm
dGVyIHRoZSBhcmd1bWVudHMgaGF2ZSBiZWVuIGxvYWRlZCBpbnRvIHJlZ2lzdGVycyAnaG90UGF0
aEJlZ2luJywgYW5kIHdlIGdlbmVyYXRlIGNvZGUKICAgICAvLyBzdWNoIHRoYXQgdGhlIFN0cnVj
dHVyZSAmIG9mZnNldCBhcmUgYWx3YXlzIGF0IHRoZSBzYW1lIGRpc3RhbmNlIGZyb20gdGhpcy4K
ICAgICAKLSAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0g
ICAgaW50IHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICBpbnQg
ZGlyZWN0ID0gY3VycmVudEluc3RydWN0aW9uWzhdLnUucHV0QnlJZEZsYWdzICYgUHV0QnlJZElz
RGlyZWN0OworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0
QnlJZD4oKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKTsKKyAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLmJhc2Uub2Zmc2V0KCk7CisgICAgaW50IHZh
bHVlID0gYnl0ZWNvZGUudmFsdWUub2Zmc2V0KCk7CisgICAgaW50IGRpcmVjdCA9IG1ldGFkYXRh
LmZsYWdzICYgUHV0QnlJZElzRGlyZWN0OwogICAgIAogICAgIGVtaXRMb2FkMihiYXNlLCByZWdU
MSwgcmVnVDAsIHZhbHVlLCByZWdUMywgcmVnVDIpOwogICAgIApAQCAtNjMzLDEyICs2NzksMTMg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiAgICAgbV9wdXRCeUlkcy5hcHBlbmQoZ2VuKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3B1dF9ieV9pZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7CiAKLSAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0g
ICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGN1
cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcFB1dEJ5SWQ+KCk7CisgICAgaW50IGJhc2UgPSBieXRlY29k
ZS5iYXNlLm9mZnNldCgpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5wcm9wZXJ0eSkpOwogCiAgICAgTGFiZWwgY29sZFBh
dGhCZWdpbih0aGlzKTsKIApAQCAtNjUzLDExICs3MDAsMTIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX3B1dF9ieV9pZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2UKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwpOwog
fQogCi12b2lkIEpJVDo6ZW1pdF9vcF9pbl9ieV9pZChJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZDsKLSAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJh
bmQ7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKTsKKyAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKKyAgICBpbnQgZHN0ID0gYnl0
ZWNvZGUuZHN0Lm9mZnNldCgpOworICAgIGludCBiYXNlID0gYnl0ZWNvZGUuYmFzZS5vZmZzZXQo
KTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIoYnl0ZWNvZGUucHJvcGVydHkpKTsKIAogICAgIGVtaXRMb2FkKGJhc2UsIHJlZ1QxLCByZWdU
MCk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlNDZWxsKGJhc2UsIHJlZ1QxKTsKQEAgLTY3
MiwxMiArNzIwLDEzIEBAIHZvaWQgSklUOjplbWl0X29wX2luX2J5X2lkKEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luX2J5X2lkKEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfaW5fYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwogCi0gICAgaW50IHJlc3VsdFZSZWcgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7Cisg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbkJ5SWQ+KCk7Cisg
ICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7CisgICAgY29uc3QgSWRl
bnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLnByb3Bl
cnR5KSk7CiAKICAgICBKSVRJbkJ5SWRHZW5lcmF0b3ImIGdlbiA9IG1faW5CeUlkc1ttX2luQnlJ
ZEluZGV4KytdOwogCkBAIC03MDUsMTIgKzc1NCwxNSBAQCB2b2lkIEpJVDo6ZW1pdFJlc29sdmVD
bG9zdXJlKGludCBkc3QsIGludCBzY29wZSwgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcywg
dQogICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7CiB9CiAKLXZvaWQgSklUOjplbWl0
X29wX3Jlc29sdmVfc2NvcGUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQg
SklUOjplbWl0X29wX3Jlc29sdmVfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKLSAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZDsKLSAgICBpbnQgc2NvcGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAg
IFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gc3RhdGljX2Nhc3Q8UmVzb2x2ZVR5cGU+KGN1cnJl
bnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQpOwotICAgIHVuc2lnbmVkIGRlcHRoID0gY3VycmVu
dEluc3RydWN0aW9uWzVdLnUub3BlcmFuZDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcFJlc29sdmVTY29wZT4oKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0
Lm9mZnNldCgpOworICAgIGludCBzY29wZSA9IGJ5dGVjb2RlLnNjb3BlLm9mZnNldCgpOworICAg
IFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gbWV0YWRhdGEucmVzb2x2ZVR5cGU7CisgICAgdW5z
aWduZWQgZGVwdGggPSBtZXRhZGF0YS5sb2NhbFNjb3BlRGVwdGg7CisKICAgICBhdXRvIGVtaXRD
b2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSkgewogICAgICAgICBzd2l0Y2ggKHJl
c29sdmVUeXBlKSB7CiAgICAgICAgIGNhc2UgR2xvYmFsUHJvcGVydHk6CkBAIC03MzMsNyArNzg1
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29wZShJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgTW9kdWxlVmFy
OgogICAgICAgICAgICAgbW92ZShUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6Q2VsbFRhZyksIHJlZ1Qx
KTsKLSAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihjdXJyZW50SW5zdHJ1Y3Rpb25bNl0u
dS5qc0NlbGwuZ2V0KCkpLCByZWdUMCk7CisgICAgICAgICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIo
bWV0YWRhdGEubGV4aWNhbEVudmlyb25tZW50LmdldCgpKSwgcmVnVDApOwogICAgICAgICAgICAg
ZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICBjYXNlIER5bmFtaWM6CkBAIC04MDksMTMgKzg2MSwxNSBAQCB2b2lkIEpJVDo6ZW1pdEdldENs
b3N1cmVWYXIoaW50IHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCkKICAgICBsb2FkMzIoQWRkcmVz
cyhyZWdUMCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBvcGVy
YW5kICogc2l6ZW9mKFJlZ2lzdGVyKSArIFBheWxvYWRPZmZzZXQpLCByZWdUMCk7CiB9CiAKLXZv
aWQgSklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kOwotICAgIGludCBzY29wZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQ7Ci0gICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBHZXRQdXRJbmZvKGN1cnJl
bnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQpLnJlc29sdmVUeXBlKCk7Ci0gICAgU3RydWN0dXJl
Kiogc3RydWN0dXJlU2xvdCA9IGN1cnJlbnRJbnN0cnVjdGlvbls1XS51LnN0cnVjdHVyZS5zbG90
KCk7Ci0gICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0
cl90Kj4oJmN1cnJlbnRJbnN0cnVjdGlvbls2XS51LnBvaW50ZXIpOworICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOworICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGludCBkc3Qg
PSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7CisgICAgaW50IHNjb3BlID0gYnl0ZWNvZGUuc2NvcGUu
b2Zmc2V0KCk7CisgICAgUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5nZXRQdXRJ
bmZvLnJlc29sdmVUeXBlKCk7CisgICAgU3RydWN0dXJlKiogc3RydWN0dXJlU2xvdCA9IG1ldGFk
YXRhLnN0cnVjdHVyZS5zbG90KCk7CisgICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4oJm1ldGFkYXRhLm9wZXJhbmQpOwogICAgIAogICAgIGF1
dG8gZW1pdENvZGUgPSBbJl0gKFJlc29sdmVUeXBlIHJlc29sdmVUeXBlLCBib29sIGluZGlyZWN0
TG9hZEZvck9wZXJhbmQpIHsKICAgICAgICAgc3dpdGNoIChyZXNvbHZlVHlwZSkgewpAQCAtOTAy
LDE2ICs5NTYsMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fc2NvcGUoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICAgICAgZW1pdENvZGUocmVzb2x2ZVR5cGUsIGZh
bHNlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUo
KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2dldF9mcm9tX3Njb3BlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwogCi0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQ7Ci0gICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG9wZXJhdGlvbkdldEZy
b21TY29wZSwgZHN0LCBjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgIGF1dG8gYnl0ZWNvZGUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbVNjb3BlPigpOworICAgIGludCBkc3QgPSBi
eXRlY29kZS5kc3Qub2Zmc2V0KCk7CisgICAgY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIGN1
cnJlbnRJbnN0cnVjdGlvbik7CiB9CiAKIHZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyaWFibGUo
SlNWYWx1ZSogb3BlcmFuZCwgaW50IHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCkBAIC05NDIs
MTQgKzk5NywxNiBAQCB2b2lkIEpJVDo6ZW1pdFB1dENsb3N1cmVWYXIoaW50IHNjb3BlLCB1aW50
cHRyX3Qgb3BlcmFuZCwgaW50IHZhbHVlLCBXYXRjaHBvaW50UwogICAgIHN0b3JlMzIocmVnVDIs
IEFkZHJlc3MocmVnVDAsIEpTTGV4aWNhbEVudmlyb25tZW50OjpvZmZzZXRPZlZhcmlhYmxlcygp
ICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikgKyBQYXlsb2FkT2Zmc2V0KSk7CiB9CiAKLXZv
aWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaW50IHNjb3BlID0gY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZDsKLSAgICBpbnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5v
cGVyYW5kOwotICAgIEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IEdldFB1dEluZm8oY3VycmVudElu
c3RydWN0aW9uWzRdLnUub3BlcmFuZCk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BQdXRUb1Njb3BlPigpOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGludCBzY29wZSA9IGJ5dGVjb2RlLnNjb3Bl
Lm9mZnNldCgpOworICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLnZhbHVlLm9mZnNldCgpOworICAg
IEdldFB1dEluZm8gZ2V0UHV0SW5mbyA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpOwogICAg
IFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gZ2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOwotICAg
IFN0cnVjdHVyZSoqIHN0cnVjdHVyZVNsb3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNV0udS5zdHJ1
Y3R1cmUuc2xvdCgpOwotICAgIHVpbnRwdHJfdCogb3BlcmFuZFNsb3QgPSByZWludGVycHJldF9j
YXN0PHVpbnRwdHJfdCo+KCZjdXJyZW50SW5zdHJ1Y3Rpb25bNl0udS5wb2ludGVyKTsKKyAgICBT
dHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEuc3RydWN0dXJlLnNsb3QoKTsKKyAg
ICB1aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigm
bWV0YWRhdGEub3BlcmFuZCk7CiAgICAgCiAgICAgYXV0byBlbWl0Q29kZSA9IFsmXSAoUmVzb2x2
ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkgewogICAgICAg
ICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CkBAIC05ODMsOSArMTA0MCw5IEBAIHZvaWQgSklUOjpl
bWl0X29wX3B1dF90b19zY29wZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAg
ICAgICAgICAgICAgIGFkZFNsb3dDYXNlKGJyYW5jaElmRW1wdHkocmVnVDEpKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGlmIChpbmRpcmVjdExvYWRGb3JPcGVyYW5kKQotICAgICAgICAg
ICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KGJpdHdpc2VfY2FzdDxKU1ZhbHVl
Kio+KG9wZXJhbmRTbG90KSwgdmFsdWUsIGJpdHdpc2VfY2FzdDxXYXRjaHBvaW50U2V0Kio+KCZj
dXJyZW50SW5zdHJ1Y3Rpb25bNV0pKTsKKyAgICAgICAgICAgICAgICBlbWl0UHV0R2xvYmFsVmFy
aWFibGVJbmRpcmVjdChiaXR3aXNlX2Nhc3Q8SlNWYWx1ZSoqPihvcGVyYW5kU2xvdCksIHZhbHVl
LCAmbWV0YWRhdGEud2F0Y2hwb2ludFNldCk7CiAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAg
ICAgICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJh
bmRTbG90KSwgdmFsdWUsIGN1cnJlbnRJbnN0cnVjdGlvbls1XS51LndhdGNocG9pbnRTZXQpOwor
ICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZShiaXR3aXNlX2Nhc3Q8SlNWYWx1
ZSo+KCpvcGVyYW5kU2xvdCksIHZhbHVlLCBtZXRhZGF0YS53YXRjaHBvaW50U2V0KTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2UgTG9jYWxDbG9zdXJlVmFyOgpA
QCAtOTkzLDcgKzEwNTAsNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrczoKICAgICAgICAgICAgIGVtaXRXcml0ZUJhcnJpZXIoc2NvcGUsIHZh
bHVlLCBTaG91bGRGaWx0ZXJWYWx1ZSk7CiAgICAgICAgICAgICBlbWl0VmFySW5qZWN0aW9uQ2hl
Y2sobmVlZHNWYXJJbmplY3Rpb25DaGVja3MocmVzb2x2ZVR5cGUpKTsKLSAgICAgICAgICAgIGVt
aXRQdXRDbG9zdXJlVmFyKHNjb3BlLCAqb3BlcmFuZFNsb3QsIHZhbHVlLCBjdXJyZW50SW5zdHJ1
Y3Rpb25bNV0udS53YXRjaHBvaW50U2V0KTsKKyAgICAgICAgICAgIGVtaXRQdXRDbG9zdXJlVmFy
KHNjb3BlLCAqb3BlcmFuZFNsb3QsIHZhbHVlLCBtZXRhZGF0YS53YXRjaHBvaW50U2V0KTsKICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE1vZHVsZVZhcjoKICAgICAgICAgY2FzZSBE
eW5hbWljOgpAQCAtMTA0MSwxMiArMTA5OCwxMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9f
c2NvcGUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICB9CiB9CiAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBsaW5r
QWxsU2xvd0Nhc2VzKGl0ZXIpOwogCi0gICAgR2V0UHV0SW5mbyBnZXRQdXRJbmZvID0gR2V0UHV0
SW5mbyhjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kKTsKLSAgICBSZXNvbHZlVHlwZSBy
ZXNvbHZlVHlwZSA9IGdldFB1dEluZm8ucmVzb2x2ZVR5cGUoKTsKKyAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dFRvU2NvcGU+KCk7CisgICAgUmVzb2x2ZVR5
cGUgcmVzb2x2ZVR5cGUgPSBjb3BpZWRHZXRQdXRJbmZvKGJ5dGVjb2RlKS5yZXNvbHZlVHlwZSgp
OwogICAgIGlmIChyZXNvbHZlVHlwZSA9PSBNb2R1bGVWYXIpIHsKICAgICAgICAgSklUU2xvd1Bh
dGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF90
aHJvd19zdHJpY3RfbW9kZV9yZWFkb25seV9wcm9wZXJ0eV93cml0ZV9lcnJvcik7CiAgICAgICAg
IHNsb3dQYXRoQ2FsbC5jYWxsKCk7CkBAIC0xMDU0LDI0ICsxMTExLDI2IEBAIHZvaWQgSklUOjpl
bWl0U2xvd19vcF9wdXRfdG9fc2NvcGUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDCiAgICAgICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uUHV0VG9TY29wZSwg
Y3VycmVudEluc3RydWN0aW9uKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2Zyb21fYXJn
dW1lbnRzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9v
cF9nZXRfZnJvbV9hcmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKLSAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAg
ICBpbnQgYXJndW1lbnRzID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICBp
bnQgaW5kZXggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0RnJvbUFyZ3VtZW50cz4oKTsKKyAg
ICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOworICAgIGludCBhcmd1bWVudHMgPSBi
eXRlY29kZS5hcmd1bWVudHMub2Zmc2V0KCk7CisgICAgaW50IGluZGV4ID0gYnl0ZWNvZGUuaW5k
ZXg7CiAgICAgCiAgICAgZW1pdExvYWRQYXlsb2FkKGFyZ3VtZW50cywgcmVnVDApOwogICAgIGxv
YWQzMihBZGRyZXNzKHJlZ1QwLCBEaXJlY3RBcmd1bWVudHM6OnN0b3JhZ2VPZmZzZXQoKSArIGlu
ZGV4ICogc2l6ZW9mKFdyaXRlQmFycmllcjxVbmtub3duPikgKyBUYWdPZmZzZXQpLCByZWdUMSk7
CiAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNl
dCgpICsgaW5kZXggKiBzaXplb2YoV3JpdGVCYXJyaWVyPFVua25vd24+KSArIFBheWxvYWRPZmZz
ZXQpLCByZWdUMCk7Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOworICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKICAgICBlbWl0
U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9wdXRfdG9f
YXJndW1lbnRzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1p
dF9vcF9wdXRfdG9fYXJndW1lbnRzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7Ci0gICAgaW50IGFyZ3VtZW50cyA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQ7Ci0gICAgaW50IGluZGV4ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAg
ICBpbnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0VG9Bcmd1bWVudHM+KCk7Cisg
ICAgaW50IGFyZ3VtZW50cyA9IGJ5dGVjb2RlLmFyZ3VtZW50cy5vZmZzZXQoKTsKKyAgICBpbnQg
aW5kZXggPSBieXRlY29kZS5pbmRleDsKKyAgICBpbnQgdmFsdWUgPSBieXRlY29kZS52YWx1ZS5v
ZmZzZXQoKTsKICAgICAKICAgICBlbWl0V3JpdGVCYXJyaWVyKGFyZ3VtZW50cywgdmFsdWUsIFNo
b3VsZEZpbHRlclZhbHVlKTsKICAgICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvUmVnaXN0ZXJTZXQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rl
clNldC5jcHAKaW5kZXggYTNlZTc0NzM3ZGE3M2JkZTJmNWFkYTcyZmZlM2ZlOWY0MTgxMDY5My4u
NWJhZDNlZjA2ZjVmZjQyZTc0NDZlMWQ3ZmE3ZjgxY2JhMTRmNTQ3YyAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9SZWdpc3RlclNldC5jcHAKQEAgLTIwMSw2ICsyMDEsOCBAQCBSZWdpc3Rl
clNldCBSZWdpc3RlclNldDo6dm1DYWxsZWVTYXZlUmVnaXN0ZXJzKCkKICAgICByZXN1bHQuc2V0
KEZQUkluZm86OmZwUmVnQ1M1KTsKICAgICByZXN1bHQuc2V0KEZQUkluZm86OmZwUmVnQ1M2KTsK
ICAgICByZXN1bHQuc2V0KEZQUkluZm86OmZwUmVnQ1M3KTsKKyNlbGlmIENQVShBUk1fVEhVTUIy
KQorICAgIHJlc3VsdC5zZXQoR1BSSW5mbzo6cmVnQ1MwKTsKICNlbmRpZgogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRE
YXRhLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3BwCmluZGV4
IDM1OWQ1ZWY4ZjY1NTMxMzQ0Y2I0ZTZkOGI0ZGNmNjg0YjBjNjFjMWIuLmZhOWE3ZWQ0MmFhZjFh
ZTM4M2VhNTVhNDNiMWFjZmNhN2I1YjYwYzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9MTEludERhdGEuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9MTEludERhdGEuY3BwCkBAIC0xMzQsNyArMTM0LDcgQEAgdm9pZCBEYXRhOjpwZXJmb3JtQXNz
ZXJ0aW9ucyhWTSYgdm0pCiAjaWYgRU5BQkxFKENfTE9PUCkKICAgICBBU1NFUlQoQ29kZUJsb2Nr
OjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCkgPT0gMSk7
CiAjZWxpZiBVU0UoSlNWQUxVRTMyXzY0KQotICAgIEFTU0VSVCghQ29kZUJsb2NrOjpsbGludEJh
c2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJzKCkpOworICAgIEFTU0VSVChD
b2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMo
KSA9PSAxKTsKICNlbGlmIChDUFUoWDg2XzY0KSAmJiAhT1MoV0lORE9XUykpICB8fCBDUFUoQVJN
NjQpCiAgICAgQVNTRVJUKENvZGVCbG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFz
VmlydHVhbFJlZ2lzdGVycygpID09IDQpOwogI2VsaWYgKENQVShYODZfNjQpICYmIE9TKFdJTkRP
V1MpKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXIuYXNtIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXIuYXNtCmluZGV4IDJmOWFlODhkZWFkMTNmN2M3ZWRjM2Y1YmE1ODkwZTQ2MTY4ZjkxZWUu
LjRlMWQwMGM1ZjBlOWE0NWZjMjBiNmFjMjA3MmUzOGJlMGE4YjM1YWQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KQEAgLTU5
Niw2ICs1OTYsMzYgQEAgaWYgWDg2XzY0IG9yIEFSTTY0IG9yIEFSTTY0RQogICAgICAgICAgICAg
cG9wIGxyLCBjZnIKICAgICAgICAgZW5kCiAgICAgZW5kCitlbHNpZiBBUk12NworICAgIG1hY3Jv
IHByb2JlKGFjdGlvbikKKyAgICAgICAgcHVzaCBhMAorICAgICAgICBwdXNoIGExCisgICAgICAg
IHB1c2ggYTIKKyAgICAgICAgcHVzaCBhMworICAgICAgICBwdXNoIHQwCisgICAgICAgIHB1c2gg
dDEKKyAgICAgICAgcHVzaCB0MgorICAgICAgICBwdXNoIHQzCisgICAgICAgIHB1c2ggdDQKKyAg
ICAgICAgcHVzaCB0NQorICAgICAgICBwdXNoIGxyCisgICAgICAgIHB1c2ggY3NyMAorCisgICAg
ICAgIGFjdGlvbigpCisKKyAgICAgICAgcG9wIGNzcjAKKyAgICAgICAgcG9wIGxyCisgICAgICAg
IHBvcCB0NQorICAgICAgICBwb3AgdDQKKyAgICAgICAgcG9wIHQzCisgICAgICAgIHBvcCB0Mgor
ICAgICAgICBwb3AgdDEKKyAgICAgICAgcG9wIHQwCisgICAgICAgIHBvcCBhMworICAgICAgICBw
b3AgYTIKKyAgICAgICAgcG9wIGExCisgICAgICAgIHBvcCBhMAorICAgIGVuZAogZWxzZQogICAg
IG1hY3JvIHByb2JlKGFjdGlvbikKICAgICBlbmQKQEAgLTc1OSw3ICs3ODksNyBAQCBtYWNybyBy
ZXN0b3JlQ2FsbGVlU2F2ZXNVc2VkQnlMTEludCgpCiBlbmQKIAogbWFjcm8gY29weUNhbGxlZVNh
dmVzVG9WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSwgdGVtcCkKLSAgICBpZiBBUk02
NCBvciBBUk02NEUgb3IgWDg2XzY0IG9yIFg4Nl82NF9XSU4KKyAgICBpZiBBUk02NCBvciBBUk02
NEUgb3IgWDg2XzY0IG9yIFg4Nl82NF9XSU4gb3IgQVJNdjcKICAgICAgICAgbG9hZHAgVk06OnRv
cEVudHJ5RnJhbWVbdm1dLCB0ZW1wCiAgICAgICAgIHZtRW50cnlSZWNvcmQodGVtcCwgdGVtcCkK
ICAgICAgICAgbGVhcCBWTUVudHJ5UmVjb3JkOjpjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyW3Rl
bXBdLCB0ZW1wCkBAIC03OTYsMTIgKzgyNiwxNCBAQCBtYWNybyBjb3B5Q2FsbGVlU2F2ZXNUb1ZN
RW50cnlGcmFtZUNhbGxlZVNhdmVzQnVmZmVyKHZtLCB0ZW1wKQogICAgICAgICAgICAgc3RvcmVx
IGNzcjQsIDMyW3RlbXBdCiAgICAgICAgICAgICBzdG9yZXEgY3NyNSwgNDBbdGVtcF0KICAgICAg
ICAgICAgIHN0b3JlcSBjc3I2LCA0OFt0ZW1wXQorICAgICAgICBlbHNpZiBBUk12NworICAgICAg
ICAgICAgc3RvcmVwIGNzcjAsIFt0ZW1wXQogICAgICAgICBlbmQKICAgICBlbmQKIGVuZAogCiBt
YWNybyByZXN0b3JlQ2FsbGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIo
dm0sIHRlbXApCi0gICAgaWYgQVJNNjQgb3IgQVJNNjRFIG9yIFg4Nl82NCBvciBYODZfNjRfV0lO
CisgICAgaWYgQVJNNjQgb3IgQVJNNjRFIG9yIFg4Nl82NCBvciBYODZfNjRfV0lOIG9yIEFSTXY3
CiAgICAgICAgIGxvYWRwIFZNOjp0b3BFbnRyeUZyYW1lW3ZtXSwgdGVtcAogICAgICAgICB2bUVu
dHJ5UmVjb3JkKHRlbXAsIHRlbXApCiAgICAgICAgIGxlYXAgVk1FbnRyeVJlY29yZDo6Y2FsbGVl
U2F2ZVJlZ2lzdGVyc0J1ZmZlclt0ZW1wXSwgdGVtcApAQCAtODM4LDYgKzg3MCw4IEBAIG1hY3Jv
IHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSwg
dGVtcCkKICAgICAgICAgICAgIGxvYWRxIDMyW3RlbXBdLCBjc3I0CiAgICAgICAgICAgICBsb2Fk
cSA0MFt0ZW1wXSwgY3NyNQogICAgICAgICAgICAgbG9hZHEgNDhbdGVtcF0sIGNzcjYKKyAgICAg
ICAgZWxzaWYgQVJNdjcKKyAgICAgICAgICAgIGxvYWRwIFt0ZW1wXSwgY3NyMAogICAgICAgICBl
bmQKICAgICBlbmQKIGVuZApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU2FtcGxpbmdQcm9maWxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
YW1wbGluZ1Byb2ZpbGVyLmNwcAppbmRleCBlMmE3MzkzZWRhODhlMTFhODJlZjc3MzUxNTk3ODAy
NWI0NzA3M2Y5Li4wZjNkMDQ5NWU3NWIxMTczNGFlNDc1M2E3NjU4Zjg1ZjMzNmViNGY3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNw
cApAQCAtNDQwLDcgKzQ0MCwxNSBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSB1bnNpZ25lZCB0cnlH
ZXRCeXRlY29kZUluZGV4KHVuc2lnbmVkIGxsaW50UEMsIENvZGVCbG9jayogYwogICAgIHJldHVy
biAwOwogI2Vsc2UKICAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBiaXR3aXNlX2Nhc3Q8
SW5zdHJ1Y3Rpb24qPihsbGludFBDKTsKLSAgICBpZiAoaW5zdHJ1Y3Rpb24gPj0gY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpICYmIGluc3RydWN0aW9uIDwgY29kZUJsb2NrLT5pbnN0
cnVjdGlvbnMoKS5lbmQoKSkgeworCisgICAgaWYgKCFjb2RlQmxvY2stPmluc3RydWN0aW9ucygp
LnNpemUoKSkgeworICAgICAgICBpc1ZhbGlkID0gZmFsc2U7CisgICAgICAgIHJldHVybiAwOwor
ICAgIH0KKworICAgIGNvbnN0IEluc3RydWN0aW9uKiBiZWdpbiA9IGNvZGVCbG9jay0+aW5zdHJ1
Y3Rpb25zKCkuYXQoMCkucHRyKCk7CisgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGVuZCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8Y29uc3QgSW5zdHJ1Y3Rpb24qPihyZWludGVycHJldF9jYXN0PGNvbnN0IHVp
bnQ4X3QqPihiZWdpbikgKyBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLnNpemUoKSk7CisgICAg
aWYgKGluc3RydWN0aW9uID49IGJlZ2luICYmIGluc3RydWN0aW9uIDwgZW5kKSB7CiAgICAgICAg
IGlzVmFsaWQgPSB0cnVlOwogICAgICAgICByZXR1cm4gY29kZUJsb2NrLT5ieXRlY29kZU9mZnNl
dChpbnN0cnVjdGlvbik7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvUGxhdGZv
cm0uaCBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKaW5kZXggZTJlYjc1YmNkYjMzYTczMTM2
NDAyZGNkMDEyZGEwNzYzZmU2OGQ2ZS4uYjNmMTI0ZGJiYjU5NWFjNGUzODg1N2RmZGY4NzQzMjkw
Y2U0MWUwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAorKysgYi9Tb3Vy
Y2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCkBAIC03NTcsMTIgKzc1NywxOSBAQAogI2RlZmluZSBFTkFC
TEVfSklUIDEKICNlbmRpZgogCi0vKiBEaXNhYmxlIEpJVCBmb3IgMzItYml0IGJ1aWxkcy4gKi8K
ICNpZiBVU0UoSlNWQUxVRTMyXzY0KQorI2lmIENQVShBUk1fVEhVTUIyKSAmJiBPUyhMSU5VWCkK
Ky8qIE9uIEFSTXY3L0xpbnV4IHRoZSBKSVQgaXMgZW5hYmxlZCB1bmxlc3MgZXhwbGljaXRseSBk
aXNhYmxlZC4gKi8KKyNpZiAhZGVmaW5lZChFTkFCTEVfSklUKQorI2RlZmluZSBFTkFCTEVfSklU
IDEKKyNlbmRpZgorLyogQnV0IHN0aWxsIGRpc2FibGUgREZHIGZvciBub3cuICovCisjdW5kZWYg
RU5BQkxFX0RGR19KSVQKKyNkZWZpbmUgRU5BQkxFX0RGR19KSVQgMAorI2Vsc2UKKy8qIERpc2Fi
bGUgSklUIGFuZCBmb3JjZSBDX0xPT1Agb24gYWxsIDMyYml0LWFyY2hpdGVjdHVyZXMgYnV0IEFS
TXY3LVRodW1iMi9MaW51eC4gKi8KICN1bmRlZiBFTkFCTEVfSklUCiAjZGVmaW5lIEVOQUJMRV9K
SVQgMAotLyogRm9yY2UgQ19MT09QIG9uIGFsbCBhcmNoaXRlY3R1cmVzIGJ1dCBBUk12Ny1UaHVt
YjIvTGludXguICovCi0jaWYgIShDUFUoQVJNX1RIVU1CMikgJiYgT1MoTElOVVgpKQogI3VuZGVm
IEVOQUJMRV9DX0xPT1AKICNkZWZpbmUgRU5BQkxFX0NfTE9PUCAxCiAjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSXNvUGFnZUlubGluZXMuaCBiL1NvdXJjZS9ibWFs
bG9jL2JtYWxsb2MvSXNvUGFnZUlubGluZXMuaAppbmRleCAwYzQ3ODY0YzdiNDlhMGVlYzhhMjYx
MGNlZjY3ZmEzMjhhNGVmNGM0Li4xMmIzMTgzMGMyMjVkMmY3MGQ0NzIzYTNkMDFlZTc4MzdhNzc4
ZTQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0lzb1BhZ2VJbmxpbmVzLmgK
KysrIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Jc29QYWdlSW5saW5lcy5oCkBAIC0xODgsNyAr
MTg4LDcgQEAgRnJlZUxpc3QgSXNvUGFnZTxDb25maWc+OjpzdGFydEFsbG9jYXRpbmcoKQogICAg
ICAgICBjaGFyKiBjZWxsQnl0ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRoaXMpICsgaW5k
ZXggKiBDb25maWc6Om9iamVjdFNpemU7CiAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAg
ICAgZnByaW50ZihzdGRlcnIsICIlcDogcHV0dGluZyAlcCBvbiBmcmVlIGxpc3QuXG4iLCB0aGlz
LCBjZWxsQnl0ZSk7Ci0gICAgICAgIEZyZWVDZWxsKiBjZWxsID0gcmVpbnRlcnByZXRfY2FzdDxG
cmVlQ2VsbCo+KGNlbGxCeXRlKTsKKyAgICAgICAgRnJlZUNlbGwqIGNlbGwgPSBiaXR3aXNlX2Nh
c3Q8RnJlZUNlbGwqPihjZWxsQnl0ZSk7CiAgICAgICAgIGNlbGwtPnNldE5leHQoaGVhZCwgc2Vj
cmV0KTsKICAgICAgICAgaGVhZCA9IGNlbGw7CiAgICAgICAgIGJ5dGVzICs9IENvbmZpZzo6b2Jq
ZWN0U2l6ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9XZWJLaXRGZWF0dXJlcy5jbWFrZSBi
L1NvdXJjZS9jbWFrZS9XZWJLaXRGZWF0dXJlcy5jbWFrZQppbmRleCAyZDU1Zjk1YWJhYWY2YWUx
NWU5M2JkN2Q3ZWFhYjBjYjk5ZTgwNGUyLi4yMTg5MGVjYmZlYmRiMzhkOGUzZjZkMTk4ODAxMTAx
NzAzNWE1N2FkIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2UvV2ViS2l0RmVhdHVyZXMuY21ha2UK
KysrIGIvU291cmNlL2NtYWtlL1dlYktpdEZlYXR1cmVzLmNtYWtlCkBAIC02OSw3ICs2OSw3IEBA
IG1hY3JvKFdFQktJVF9PUFRJT05fQkVHSU4pCiAgICAgICAgIHNldChFTkFCTEVfQ19MT09QX0RF
RkFVTFQgT0ZGKQogICAgICAgICBzZXQoRU5BQkxFX1NBTVBMSU5HX1BST0ZJTEVSX0RFRkFVTFQg
T04pCiAgICAgZWxzZWlmIChXVEZfQ1BVX0FSTSBBTkQgV1RGX09TX1VOSVgpCi0gICAgICAgIHNl
dChFTkFCTEVfSklUX0RFRkFVTFQgT0ZGKQorICAgICAgICBzZXQoRU5BQkxFX0pJVF9ERUZBVUxU
IE9OKQogICAgICAgICBzZXQoRU5BQkxFX0ZUTF9ERUZBVUxUIE9GRikKICAgICAgICAgc2V0KFVT
RV9TWVNURU1fTUFMTE9DX0RFRkFVTFQgT0ZGKQogICAgICAgICBzZXQoRU5BQkxFX0NfTE9PUF9E
RUZBVUxUIE9GRikKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCAwMDU1
NmJiNzM3YjdmYmFjZDc1NmE3ODY1ZTU3OTdkMDQzMDE0Y2I3Li43YThkMmU4NDM1ZDAyNTBmODQ5
YzIyYWMwY2IzODJiZDZiODBlOTAxIDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTgtMTEtMTIgIERvbWluaWsgSW5mdWVociAgPGRpbmZ1
ZWhyQGlnYWxpYS5jb20+CisKKyAgICAgICAgRW5hYmxlIEpJVCBvbiBBUk0vTGludXgKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTU0OAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEVuYWJsZSBKSVQgYnkg
ZGVmYXVsdCBvbiBBUk12Ny9MaW51eCBhZnRlciBpdCB3YXMgZGlzYWJsZWQgd2l0aAorICAgICAg
ICByZWNlbnQgYnl0Y29kZSBmb3JtYXQgY2hhbmdlLgorCisgICAgICAgICogU291cmNlL2NtYWtl
L1dlYktpdEZlYXR1cmVzLmNtYWtlOgorCiAyMDE4LTExLTE2ICBEb24gT2xtc3RlYWQgIDxkb24u
b2xtc3RlYWRAc29ueS5jb20+CiAKICAgICAgICAgQWRkIFVTRShMSUJXUEUpIHRvIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXgg
Mjg1OGVhMWZhYzQzNGNlMmU5MGY4YTljNWM4Nzk5OTM2MzM4ODA0MS4uN2UwMTRkYzk2YTJhNTZk
NThlOTkwNjlmMDA5M2M5MTAzZDZjNjEwZiAxMDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cK
KysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxOC0xMS0xMiAgRG9t
aW5payBJbmZ1ZWhyICA8ZGluZnVlaHJAaWdhbGlhLmNvbT4KKworICAgICAgICBFbmFibGUgSklU
IG9uIEFSTS9MaW51eAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTkxNTQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgRGlzYWJsZSB0ZXN0IG9uIHN5c3RlbSB3aXRoIGxpbWl0ZWQgbWVtb3J5LiBQcm9ncmFt
IHdhcyBraWxsZWQgYnkKKyAgICAgICAgdGhlIE9TIGJlZm9yZSB0aGUgZXhjZXB0aW9uIHdhcyB0
aHJvd24uCisKKyAgICAgICAgKiBzbG93TWljcm9iZW5jaG1hcmtzL2Z1bmN0aW9uLWNvbnN0cnVj
dG9yLXdpdGgtaHVnZS1zdHJpbmdzLmpzOgorCiAyMDE4LTExLTE5ICBNYXJrIExhbSAgPG1hcmsu
bGFtQGFwcGxlLmNvbT4KIAogICAgICAgICBnbG9iYWxGdW5jSW1wb3J0TW9kdWxlKCkgc2hvdWxk
IHJldHVybiBhIHByb21pc2Ugd2hlbiBpdCBjbGVhcnMgZXhjZXB0aW9ucy4KZGlmZiAtLWdpdCBh
L0pTVGVzdHMvc2xvd01pY3JvYmVuY2htYXJrcy9mdW5jdGlvbi1jb25zdHJ1Y3Rvci13aXRoLWh1
Z2Utc3RyaW5ncy5qcyBiL0pTVGVzdHMvc2xvd01pY3JvYmVuY2htYXJrcy9mdW5jdGlvbi1jb25z
dHJ1Y3Rvci13aXRoLWh1Z2Utc3RyaW5ncy5qcwppbmRleCBjNjEzZWQ4NDgzYzEzNzA0ZGIwYTIw
NjVmOTJmMTMzYTg0ODNiNGVlLi44NjYxNzA1NjE1Zjg1NjdlNTE5NWU2MDhjMDk3NDA2ZjNhMTI1
ZGRhIDEwMDY0NAotLS0gYS9KU1Rlc3RzL3Nsb3dNaWNyb2JlbmNobWFya3MvZnVuY3Rpb24tY29u
c3RydWN0b3Itd2l0aC1odWdlLXN0cmluZ3MuanMKKysrIGIvSlNUZXN0cy9zbG93TWljcm9iZW5j
aG1hcmtzL2Z1bmN0aW9uLWNvbnN0cnVjdG9yLXdpdGgtaHVnZS1zdHJpbmdzLmpzCkBAIC0xLDMg
KzEsNCBAQAorLy9AIHNraXAgaWYgJG1lbW9yeUxpbWl0ZWQKIHZhciBodWdlU3RyaW5nID0gIngi
OwogZm9yIChpID0gMDsgaSA8IDI1OyArK2kpIHsKICAgICBodWdlU3RyaW5nICs9IGh1Z2VTdHJp
bmc7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>355356</attachid>
            <date>2018-11-20 12:44:33 -0800</date>
            <delta_ts>2018-11-21 01:10:04 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191548-20181120214431.patch</filename>
            <type>text/plain</type>
            <size>140292</size>
            <attacher name="Dominik Inführ">dominik.infuehr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM4Mzk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
ZjIwNzNmMGY0NjNjMTYzYzIzNWQzMjMwZWNjNTBhNTc0OThlMmFjLi4wOGUwNzQwNGMzOGFhYTQx
MDM2OTlhY2ExMTEwMGRmZDIyZmVjZWQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxODkgQEAKKzIwMTgtMTEtMjAgIERvbWluaWsgSW5mdWVociAgPGRpbmZ1ZWhyQGlnYWxp
YS5jb20+CisKKyAgICAgICAgRW5hYmxlIEpJVCBvbiBBUk0vTGludXgKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTU0OAorCisgICAgICAgIFJldmll
d2VkIGJ5IFl1c3VrZSBTdXp1a2kuCisKKyAgICAgICAgRW5hYmxlIEpJVCBieSBkZWZhdWx0IG9u
IEFSTXY3L0xpbnV4IGFmdGVyIGl0IHdhcyBkaXNhYmxlZCB3aXRoCisgICAgICAgIHJlY2VudCBi
eXRjb2RlIGZvcm1hdCBjaGFuZ2UuCisKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3Bw
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmdldElDU3RhdHVzTWFwKToKKyAgICAgICAgKiBi
eXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjptZXRhZGF0YSk6
CisgICAgICAgICogYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6SW5C
eUlkU3RhdHVzOjpjb21wdXRlRm9yKToKKyAgICAgICAgKiBieXRlY29kZS9JbnN0cnVjdGlvbi5o
OgorICAgICAgICAoSlNDOjpJbnN0cnVjdGlvbjo6Y2FzdCk6CisgICAgICAgICogYnl0ZWNvZGUv
TWV0YWRhdGFUYWJsZS5oOgorICAgICAgICAoSlNDOjpNZXRhZGF0YVRhYmxlOjpmb3JFYWNoKToK
KyAgICAgICAgKiBieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6UHV0
QnlJZFN0YXR1czo6Y29tcHV0ZUZvcik6CisgICAgICAgIChKU0M6OlB1dEJ5SWRTdGF0dXM6Omhh
c0V4aXRTaXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9QdXRCeUlkU3RhdHVzLmg6
CisgICAgICAgICogZGZnL0RGR09TUkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OnJlaWZ5
SW5saW5lZENhbGxGcmFtZXMpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21t
b24uY3BwOgorICAgICAgICAoSlNDOjpERkc6OnJlaWZ5SW5saW5lZENhbGxGcmFtZXMpOgorICAg
ICAgICAqIGdlbmVyYXRvci9Bcmd1bWVudC5yYjoKKyAgICAgICAgKiBnZW5lcmF0b3IvT3Bjb2Rl
LnJiOgorICAgICAgICAqIGppdC9HUFJJbmZvLmg6CisgICAgICAgICogaml0L0pJVC5oOgorICAg
ICAgICAqIGppdC9KSVRBcml0aG1ldGljMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfY29tcGFyZUFuZEp1bXApOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZVVuc2ln
bmVkQW5kSnVtcCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWQpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX3Vuc2lnbmVkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lu
Yyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWMpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRCaW5hcnlEb3VibGVPcCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tb2QpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX21vZCk6CisgICAgICAgICogaml0L0pJVENh
bGwzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dENhbGxSZXN1bHQpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcmV0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xv
d19vcF9jYWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF90YWlsX2NhbGwpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2NhbGxfZXZhbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3df
b3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3df
b3BfY29uc3RydWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NhbGwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfdGFpbF9jYWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX2NhbGxfZXZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jYWxsX3ZhcmFyZ3Mp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2NvbnN0cnVjdF92YXJhcmdzKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2NvbnN0cnVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZVNldHVw
RnJhbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVDYWxsRXZhbCk6CisgICAgICAgIChK
U0M6OkpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmNv
bXBpbGVPcENhbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZSk6
CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZVNldHVwVmFyYXJnc0ZyYW1lKTogRGVsZXRlZC4K
KyAgICAgICAgKiBqaXQvSklUSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6OnVwZGF0ZVRv
cENhbGxGcmFtZSk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfY2F0Y2gpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2xv
b3BfaGludCk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMzMl82NC5jcHA6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9tb3YpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW5kKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2ptcCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9uZXdfb2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9uZXdfb2Jq
ZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2Up
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZik6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3RvbSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3BfaW5zdGFuY2VvZik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaW5z
dGFuY2VvZl9jdXN0b20pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfZW1wdHkpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2lzX2Jvb2xlYW4pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNf
bnVtYmVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX2NlbGxfd2l0aF90eXBlKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX29iamVjdCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF90b19wcmltaXRpdmUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc2V0
X2Z1bmN0aW9uX25hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfbm90KToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2pmYWxzZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9qdHJ1ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZXFfbnVsbCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9qbmVxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3Bfam5lcV9wdHIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZXEpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRTbG93X29wX2VxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2pl
cSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfamVxKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX25lcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfbmVxKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2puZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRTbG93X29wX2puZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcFN0cmljdEVxKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N0cmljdGVxKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX25zdHJpY3RlcSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wU3RyaWN0
RXFKdW1wKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2pzdHJpY3RlcSk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9qbnN0cmljdGVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
U2xvd19vcF9qc3RyaWN0ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2puc3Ry
aWN0ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZXFfbnVsbCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9uZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90
aHJvdyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19udW1iZXIpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfdG9fc3RyaW5nKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X3RvX29iamVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jYXRjaCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9pZGVudGl0eV93aXRoX3Byb2ZpbGUpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfZ2V0X3BhcmVudF9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9zd2l0Y2hfaW1tKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRjaF9jaGFy
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfZGVidWcpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW50
ZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X3Njb3BlKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2NyZWF0ZV90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X3RvX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2hlY2tfdGR6KToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkpOgorICAgICAgICAo
SlNDOjpKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2Vu
dW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2Vu
dW1lcmF0b3JfZ2VuZXJpY19wbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wcm9m
aWxlX3R5cGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2Vu
X3Byb2xvZ3VlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tl
bl90YWlsKToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHA6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
cHV0X2dldHRlcl9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3NldHRl
cl9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2RlbF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEdldEJ5VmFsV2l0aENh
Y2hlZElkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV92YWxfZGlyZWN0KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRHZW5l
cmljQ29udGlndW91c1B1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0QXJyYXlTdG9y
YWdlUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRCeVZhbFdpdGhDYWNoZWRJ
ZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dl
dF9ieV9pZF9kaXJlY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9p
ZF9kaXJlY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9w
dXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdFNsb3dfb3BfaW5fYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcmVzb2x2
ZV9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
U2xvd19vcF9wdXRfdG9fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2Zy
b21fYXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF90b19hcmd1bWVu
dHMpOgorICAgICAgICAqIGppdC9SZWdpc3RlclNldC5jcHA6CisgICAgICAgIChKU0M6OlJlZ2lz
dGVyU2V0Ojp2bUNhbGxlZVNhdmVSZWdpc3RlcnMpOgorICAgICAgICAqIGxsaW50L0xMSW50RGF0
YS5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpEYXRhOjpwZXJmb3JtQXNzZXJ0aW9ucyk6Cisg
ICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAgICogcnVudGlt
ZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6dHJ5R2V0Qnl0ZWNvZGVJbmRl
eCk6CisKIDIwMTgtMTEtMjAgIEZ1amlpIEhpcm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5j
b20+CiAKICAgICAgICAgUkVHUkVTU0lPTihyMjM4MDM5KSBXZWJDb3JlOjpKU0RPTUdsb2JhbE9i
amVjdDo6Y3JlYXRlU3RydWN0dXJlIGlzIHVzaW5nIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUgd2l0
aG91dCBpbmNsdWRpbmcgU3RydWN0dXJlSW5saW5lcy5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGQxMWQ5ZGVmOGIxMzhiNzEx
MTYwMWFhYmVjYTM1OGQ4MTAxMDJhNzcuLmU4MWNjZDgxNmNiZGQ4MGJjMTViYTVlYTdkNWE1NDMz
Mjg0Mzg4NWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
VEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTgtMTEtMjAgIERvbWluaWsgSW5mdWVo
ciAgPGRpbmZ1ZWhyQGlnYWxpYS5jb20+CisKKyAgICAgICAgRW5hYmxlIEpJVCBvbiBBUk0vTGlu
dXgKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTU0
OAorCisgICAgICAgIFJldmlld2VkIGJ5IFl1c3VrZSBTdXp1a2kuCisKKyAgICAgICAgRW5hYmxl
IEpJVCBieSBkZWZhdWx0IG9uIEFSTXY3L0xpbnV4IGFmdGVyIGl0IHdhcyBkaXNhYmxlZCB3aXRo
CisgICAgICAgIHJlY2VudCBieXRjb2RlIGZvcm1hdCBjaGFuZ2UuCisKKyAgICAgICAgKiB3dGYv
UGxhdGZvcm0uaDoKKwogMjAxOC0xMS0xNCAgS2VpdGggUm9sbGluICA8a3JvbGxpbkBhcHBsZS5j
b20+CiAKICAgICAgICAgRml4ICNlbmQgdnMuICNlbmRpZiB0eXBvLgpkaWZmIC0tZ2l0IGEvU291
cmNlL2JtYWxsb2MvQ2hhbmdlTG9nIGIvU291cmNlL2JtYWxsb2MvQ2hhbmdlTG9nCmluZGV4IDM3
YWRmZTgwYjgxYTNlY2ZjOWRhNTQzZjBlN2M3NWM0ZWIwNDVmMWYuLjI3Zjc2NDZmYzE4MWQyM2Uw
OTBjMWYyNWU0YTFlZTA2MzdhZGMzYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9ibWFsbG9jL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvYm1hbGxvYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAx
OC0xMS0yMCAgRG9taW5payBJbmZ1ZWhyICA8ZGluZnVlaHJAaWdhbGlhLmNvbT4KKworICAgICAg
ICBFbmFibGUgSklUIG9uIEFSTS9MaW51eAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTkxNTQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWXVzdWtlIFN1
enVraS4KKworICAgICAgICAqIGJtYWxsb2MvSXNvUGFnZUlubGluZXMuaDoKKyAgICAgICAgKGJt
YWxsb2M6Oklzb1BhZ2U8Q29uZmlnPjo6c3RhcnRBbGxvY2F0aW5nKToKKwogMjAxOC0xMS0wMSAg
Smlld2VuIFRhbiAgPGppZXdlbl90YW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJlcGxhY2UgQ29t
bW9uUmFuZG9tIFNQSSB3aXRoIEFQSQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5oCmluZGV4IDI5YTYwNWI5ZjYwNjcyMzMzMjkwYWI2ZjQwNzc3OGM0ODhiYzg1ZGQu
LmU3YzY2ZTI1MzQwZjg2ZDZhMGFhOWI0MDhhOGNhNmQ0NDdkYWFjMmIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKQEAgLTg2MCw3ICs4NjAsNyBAQCBwdWJs
aWM6CiAgICAgTWV0YWRhdGEmIG1ldGFkYXRhKE9wY29kZUlEIG9wY29kZUlELCB1bnNpZ25lZCBt
ZXRhZGF0YUlEKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fbWV0YWRhdGEpOwotICAgICAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxNZXRhZGF0YSo+KG1fbWV0YWRhdGEtPmdldChvcGNvZGVJ
RCkpW21ldGFkYXRhSURdOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PE1ldGFkYXRhKj4o
bV9tZXRhZGF0YS0+Z2V0KG9wY29kZUlEKSlbbWV0YWRhdGFJRF07CiAgICAgfQogCiAgICAgc2l6
ZV90IG1ldGFkYXRhU2l6ZUluQnl0ZXMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvSW5zdHJ1Y3Rpb24uaAppbmRleCBkOTRmYzY3MThkNTNhYzkwYWNmZDZjZDI1MWIyMzQ4MmE3
Njk1NDI0Li5jYjgyNmNkZmI1ZTVkM2Y5NWQzMjk0ZTU2YTJiMDRjNWQ0NDdjMDBmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaApAQCAtOTEsNyArOTEs
NyBAQCBwdWJsaWM6CiAgICAgVCogY2FzdCgpCiAgICAgewogICAgICAgICBBU1NFUlQoaXM8VD4o
KSk7Ci0gICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFQqPih0aGlzKTsKKyAgICAgICAg
cmV0dXJuIGJpdHdpc2VfY2FzdDxUKj4odGhpcyk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8Y2xh
c3MgVD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVj
dGlvblN0cmVhbS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rp
b25TdHJlYW0uY3BwCmluZGV4IDE0NjFhZmRhMjg1MjA4MGE4NmNiNjIzMGIyMzljZTI4ZGIyZDMw
MzYuLmQ3ZDY2NGQ0MTE4NDllYjc1ZWE2NDA2ZWNhMDA4YmRhZDhjMGEwMmQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvblN0cmVhbS5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uU3RyZWFtLmNwcApA
QCAtNDAsNCArNDAsMTMgQEAgc2l6ZV90IEluc3RydWN0aW9uU3RyZWFtOjpzaXplSW5CeXRlcygp
IGNvbnN0CiAgICAgcmV0dXJuIG1faW5zdHJ1Y3Rpb25zLnNpemUoKTsKIH0KIAorYm9vbCBJbnN0
cnVjdGlvblN0cmVhbTo6Y29udGFpbnMoSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKSBjb25zdAor
eworCisgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGJlZ2luID0gYXQoMCkucHRyKCk7CisgICAgY29u
c3QgSW5zdHJ1Y3Rpb24qIGVuZCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgSW5zdHJ1Y3Rpb24q
PihyZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihiZWdpbikgKyBzaXplKCkpOworCisg
ICAgcmV0dXJuIGluc3RydWN0aW9uID49IGJlZ2luICYmIGluc3RydWN0aW9uIDwgZW5kOworfQor
CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rp
b25TdHJlYW0uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvblN0
cmVhbS5oCmluZGV4IDQ0YjRiZTc0Y2U4N2UyZTNlNjlmMzM3OTYyYzA1MTFmNGMwNDViZTEuLjcw
ZWRlM2U0MWM1ZDVjNDg5ZDc5NmZjZmMwYzFjY2Q5OThkMjllZDUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvblN0cmVhbS5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvblN0cmVhbS5oCkBAIC0xNjcsNiAr
MTY3LDggQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9pbnN0cnVjdGlvbnMuZGF0YSgpOwog
ICAgIH0KIAorICAgIGJvb2wgY29udGFpbnMoSW5zdHJ1Y3Rpb24gKikgY29uc3Q7CisKIHByb3Rl
Y3RlZDoKICAgICBleHBsaWNpdCBJbnN0cnVjdGlvblN0cmVhbShJbnN0cnVjdGlvbkJ1ZmZlciYm
KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL01ldGFkYXRh
VGFibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRhZGF0YVRhYmxlLmgK
aW5kZXggNjBjZGU1ZjVhYTEyODE1MjI4YjM2NmMwODk5MDUyZTU3MzU4ZmNhZS4uYTVkNDEyMWIx
ZDQxZDE2MWJmMjY1NDJlMDkyODZjZmJkOTkzOTViOCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL01ldGFkYXRhVGFibGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvTWV0YWRhdGFUYWJsZS5oCkBAIC01NSw4ICs1NSw4IEBAIHB1YmxpYzoK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBPcCwgdHlwZW5hbWUgRnVuY3Rvcj4KICAgICBBTFdBWVNf
SU5MSU5FIHZvaWQgZm9yRWFjaChjb25zdCBGdW5jdG9yJiBmdW5jKQogICAgIHsKLSAgICAgICAg
YXV0byogbWV0YWRhdGEgPSByZWludGVycHJldF9jYXN0PHR5cGVuYW1lIE9wOjpNZXRhZGF0YSo+
KGdldChPcDo6b3Bjb2RlSUQpKTsKLSAgICAgICAgYXV0byogZW5kID0gcmVpbnRlcnByZXRfY2Fz
dDx0eXBlbmFtZSBPcDo6TWV0YWRhdGEqPihnZXRJbXBsKE9wOjpvcGNvZGVJRCArIDEpKTsKKyAg
ICAgICAgYXV0byogbWV0YWRhdGEgPSBiaXR3aXNlX2Nhc3Q8dHlwZW5hbWUgT3A6Ok1ldGFkYXRh
Kj4oZ2V0KE9wOjpvcGNvZGVJRCkpOworICAgICAgICBhdXRvKiBlbmQgPSBiaXR3aXNlX2Nhc3Q8
dHlwZW5hbWUgT3A6Ok1ldGFkYXRhKj4oZ2V0SW1wbChPcDo6b3Bjb2RlSUQgKyAxKSk7CiAgICAg
ICAgIGZvciAoOyBtZXRhZGF0YSArIDEgPD0gZW5kOyArK21ldGFkYXRhKQogICAgICAgICAgICAg
ZnVuYygqbWV0YWRhdGEpOwogICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT1NSRXhpdC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4
aXQuY3BwCmluZGV4IDEyYjM0ZTJmNDFiODc5MWFkZGZhMGRhN2E2NGFmOTliMjUwMzg5ZmUuLjZl
YTk3NzY5YzA5ZDMyYjkzNmUwNGM4N2U4NGM4YzhkZWVkNGEwYTQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcApAQCAtODExLDcgKzgxMSw3IEBAIHN0YXRpYyB2b2lk
IHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ29udGV4dCYgY29udGV4dCwgQ29kZUJsb2NrKiBvdXRl
cm1vc3RCYXNlbGluCiAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxs
KQogICAgICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZChpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zm
c2V0ICsgQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCBKU1ZhbHVlKGlubGluZUNhbGxGcmFtZS0+Y2Fs
bGVlQ29uc3RhbnQoKSkpOwogI2Vsc2UgLy8gVVNFKEpTVkFMVUU2NCkgLy8gc28gdGhpcyBpcyB0
aGUgMzItYml0IHBhcnQKLSAgICAgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gJmJhc2Vs
aW5lQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKVtjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4XTsK
KyAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gYmFzZWxpbmVDb2RlQmxv
Y2stPmluc3RydWN0aW9ucygpLmF0KGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgpLnB0cigpOwog
ICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGluc3RydWN0aW9u
KS5iaXRzKCk7CiAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQ8dWludDMyX3Q+KGlubGluZUNhbGxG
cmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50LCBUYWdPZmZz
ZXQsIGxvY2F0aW9uQml0cyk7CiAgICAgICAgIGZyYW1lLnNldE9wZXJhbmQ8dWludDMyX3Q+KGlu
bGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUsIFRhZ09m
ZnNldCwgc3RhdGljX2Nhc3Q8dWludDMyX3Q+KEpTVmFsdWU6OkNlbGxUYWcpKTsKQEAgLTgyNSw3
ICs4MjUsNyBAQCBzdGF0aWMgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENvbnRleHQmIGNv
bnRleHQsIENvZGVCbG9jayogb3V0ZXJtb3N0QmFzZWxpbgogI2lmIFVTRShKU1ZBTFVFNjQpCiAg
ICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoY29kZU9yaWdpbi0+
Ynl0ZWNvZGVJbmRleCkuYml0cygpOwogI2Vsc2UKLSAgICAgICAgSW5zdHJ1Y3Rpb24qIGluc3Ry
dWN0aW9uID0gJm91dGVybW9zdEJhc2VsaW5lQ29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKVtjb2Rl
T3JpZ2luLT5ieXRlY29kZUluZGV4XTsKKyAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3Ry
dWN0aW9uID0gb3V0ZXJtb3N0QmFzZWxpbmVDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGNv
ZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgpLnB0cigpOwogICAgICAgICB1aW50MzJfdCBsb2NhdGlv
bkJpdHMgPSBDYWxsU2l0ZUluZGV4KGluc3RydWN0aW9uKS5iaXRzKCk7CiAjZW5kaWYKICAgICAg
ICAgZnJhbWUuc2V0T3BlcmFuZDx1aW50MzJfdD4oQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRDb3Vu
dCwgVGFnT2Zmc2V0LCBsb2NhdGlvbkJpdHMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCmluZGV4IDExMWViZDMyYjA3
YmM5OGM2MDE1NDhhZmE5ZmIyNzdkM2ZhYzQwZTcuLmMxYWI4NDY4YTUwY2JjNTMxZTJiZjkzYmI3
NGIxMTU2ZGEyZTk0MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKQEAgLTIzNyw3ICsyMzcsNyBAQCB2b2lkIHJl
aWZ5SW5saW5lZENhbGxGcmFtZXMoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IE9TUkV4aXRCYXNl
JiBleGl0KQogICAgICAgICAgICAgaml0LnN0b3JlNjQoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVk
SW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWVDb25z
dGFudCgpKSkpLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3Rlciko
aW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsK
ICNlbHNlIC8vIFVTRShKU1ZBTFVFNjQpIC8vIHNvIHRoaXMgaXMgdGhlIDMyLWJpdCBwYXJ0CiAg
ICAgICAgIGppdC5zdG9yZVB0cihjYWxsZXJGcmFtZUdQUiwgQXNzZW1ibHlIZWxwZXJzOjphZGRy
ZXNzRm9yQnl0ZU9mZnNldChpbmxpbmVDYWxsRnJhbWUtPmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsK
LSAgICAgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gJmJhc2VsaW5lQ29kZUJsb2NrLT5p
bnN0cnVjdGlvbnMoKVtjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4XTsKKyAgICAgICAgY29uc3Qg
SW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gYmFzZWxpbmVDb2RlQmxvY2stPmluc3RydWN0aW9u
cygpLmF0KGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXgpLnB0cigpOwogICAgICAgICB1aW50MzJf
dCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGluc3RydWN0aW9uKS5iaXRzKCk7CiAgICAg
ICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0
cyksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxG
cmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENvdW50KSkpOwogICAg
ICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpD
ZWxsVGFnKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5l
Q2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSkpKTsKQEAgLTI1
MSw3ICsyNTEsNyBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ0NhbGxIZWxwZXJzJiBq
aXQsIGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0KQogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAg
IHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoY29kZU9yaWdpbi0+Ynl0ZWNv
ZGVJbmRleCkuYml0cygpOwogI2Vsc2UKLSAgICAgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9u
ID0gJmppdC5iYXNlbGluZUNvZGVCbG9jaygpLT5pbnN0cnVjdGlvbnMoKVtjb2RlT3JpZ2luLT5i
eXRlY29kZUluZGV4XTsKKyAgICAgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0g
aml0LmJhc2VsaW5lQ29kZUJsb2NrKCktPmluc3RydWN0aW9ucygpLmF0KGNvZGVPcmlnaW4tPmJ5
dGVjb2RlSW5kZXgpLnB0cigpOwogICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxs
U2l0ZUluZGV4KGluc3RydWN0aW9uKS5iaXRzKCk7CiAjZW5kaWYKICAgICAgICAgaml0LnN0b3Jl
MzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQXNzZW1ibHlI
ZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcikoQ2FsbEZyYW1lU2xvdDo6YXJndW1lbnRD
b3VudCkpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvQXJn
dW1lbnQucmIgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL0FyZ3VtZW50LnJiCmlu
ZGV4IGY1ZGRmNTA1YzQxNDViMWI3YmRmMjRjNzE5ZTM2ODllZmZiNWMxMjQuLmU2OWY4YWI0YWFh
YjdiYmUxZDRlMjg3YmVlOTQwNTY2MzYyMTViNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9nZW5lcmF0b3IvQXJndW1lbnQucmIKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2dlbmVyYXRvci9Bcmd1bWVudC5yYgpAQCAtNzQsNyArNzQsNyBAQCBjbGFzcyBBcmd1bWVudAog
ICAgICAgICB7CiAgICAgICAgICAgICBpZiAoISN7Rml0czo6Y2hlY2sgInNpemUiLCAidmFsdWUi
LCBAdHlwZX0pCiAgICAgICAgICAgICAgICAgdmFsdWUgPSBmdW5jKCk7Ci0gICAgICAgICAgICBh
dXRvKiBzdHJlYW0gPSByZWludGVycHJldF9jYXN0PHR5cGVuYW1lIFR5cGVCeVNpemU8c2l6ZT46
OnR5cGUqPihyZWludGVycHJldF9jYXN0PHVpbnQ4X3QqPih0aGlzKSArICN7QGluZGV4fSAqIHNp
emUgKyBQYWRkaW5nQnlTaXplPHNpemU+Ojp2YWx1ZSk7CisgICAgICAgICAgICBhdXRvKiBzdHJl
YW0gPSBiaXR3aXNlX2Nhc3Q8dHlwZW5hbWUgVHlwZUJ5U2l6ZTxzaXplPjo6dHlwZSo+KHJlaW50
ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHRoaXMpICsgI3tAaW5kZXh9ICogc2l6ZSArIFBhZGRpbmdC
eVNpemU8c2l6ZT46OnZhbHVlKTsKICAgICAgICAgICAgICpzdHJlYW0gPSAje0ZpdHM6OmNvbnZl
cnQgInNpemUiLCAidmFsdWUiLCBAdHlwZX07CiAgICAgICAgIH0KICAgICAgICAgRU9GCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL09wY29kZS5yYiBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvT3Bjb2RlLnJiCmluZGV4IGIwYTRlMGE0MmU1OTc5
MDMzNzNlMDlhNTk3Y2UxZWIxZjNjOTFhY2QuLmVhZTAwYzU3NmQxZDgxOGVjNjMxZWQ5ZDFmOGNm
YjhiMzJlNTJlYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3Iv
T3Bjb2RlLnJiCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3IvT3Bjb2RlLnJi
CkBAIC0xOTIsNyArMTkyLDcgQEAgY2xhc3MgT3Bjb2RlCiAgICAgICAgICAgICBpZiAoKnN0cmVh
bSAhPSBvcF93aWRlKQogICAgICAgICAgICAgICAgIHJldHVybiB7IHN0cmVhbSB9OwogCi0gICAg
ICAgICAgICBhdXRvIHdpZGVTdHJlYW0gPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQzMl90
Kj4oc3RyZWFtICsgMSk7CisgICAgICAgICAgICBhdXRvIHdpZGVTdHJlYW0gPSBiaXR3aXNlX2Nh
c3Q8Y29uc3QgdWludDMyX3QqPihzdHJlYW0gKyAxKTsKICAgICAgICAgICAgIHJldHVybiB7IHdp
ZGVTdHJlYW0gfTsKICAgICAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0dQUkluZm8uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oCmlu
ZGV4IGYxNWFlODM3NWIzNDEzNzQ2YzFlMzc5ODg3ZTgzYTEzMTY3MzI5NDQuLjZmNmFkZDBlYTgx
YWE2ZTJhMTM4NmUwNDQ5Nzc1MjdiNzNiMTc0MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvR1BSSW5mby5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BS
SW5mby5oCkBAIC01MjgsNyArNTI4LDcgQEAgcHVibGljOgogCiAjaWYgQ1BVKEFSTSkKICNkZWZp
bmUgTlVNQkVSX09GX0FSR1VNRU5UX1JFR0lTVEVSUyA0dQotI2RlZmluZSBOVU1CRVJfT0ZfQ0FM
TEVFX1NBVkVTX1JFR0lTVEVSUyAwdQorI2RlZmluZSBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JF
R0lTVEVSUyAxdQogCiBjbGFzcyBHUFJJbmZvIHsKIHB1YmxpYzoKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oCmluZGV4IDZkYjRkN2Y2YWRlM2FlZDQ2MDhkMDIyMzU2MTBlNzNkMDVkNWNlOTcuLjM5NWY1
Mzg2ZjI5ZTkwNDY3N2Q1YjBmNzYyNDZkOTRmYzliYTY4NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuaApAQCAtNDU3LDcgKzQ1Nyw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGNv
bXBpbGVHZXRCeUlkSG90UGF0aChjb25zdCBJZGVudGlmaWVyKik7CiAKICAgICAgICAgLy8gQXJp
dGhtZXRpYyBvcGNvZGUgaGVscGVycwotICAgICAgICB2b2lkIGVtaXRCaW5hcnlEb3VibGVPcChP
cGNvZGVJRCwgaW50IGRzdCwgaW50IG9wMSwgaW50IG9wMiwgT3BlcmFuZFR5cGVzLCBKdW1wTGlz
dCYgbm90SW50MzJPcDEsIEp1bXBMaXN0JiBub3RJbnQzMk9wMiwgYm9vbCBvcDFJc0luUmVnaXN0
ZXJzID0gdHJ1ZSwgYm9vbCBvcDJJc0luUmVnaXN0ZXJzID0gdHJ1ZSk7CisgICAgICAgIHRlbXBs
YXRlIDx0eXBlbmFtZSBPcD4KKyAgICAgICAgdm9pZCBlbWl0QmluYXJ5RG91YmxlT3AoY29uc3Qg
SW5zdHJ1Y3Rpb24gKiwgT3BlcmFuZFR5cGVzLCBKdW1wTGlzdCYgbm90SW50MzJPcDEsIEp1bXBM
aXN0JiBub3RJbnQzMk9wMiwgYm9vbCBvcDFJc0luUmVnaXN0ZXJzID0gdHJ1ZSwgYm9vbCBvcDJJ
c0luUmVnaXN0ZXJzID0gdHJ1ZSk7CiAKICNlbHNlIC8vIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAg
ICAgIHZvaWQgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnQgc3JjLCBSZWdpc3RlcklEIGRzdCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMzMl82
NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMzMl82NC5jcHAK
aW5kZXggZDNlYmRiNjdjNTIxY2I2OTlmMzdlMDk4OTIwN2E0ZTIxZTc5Y2M1My4uOGJlNzQ1ZGYz
MjBiY2Y0MmUzMDcxYjMyZjI5YTNiZjY4YmJhNDZhNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRBcml0aG1ldGljMzJfNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQXJpdGhtZXRpYzMyXzY0LmNwcApAQCAtNDEsMTEgKzQxLDE3IEBACiAK
IG5hbWVzcGFjZSBKU0MgewogCi12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChPcGNvZGVJ
RCBvcGNvZGUsIGludCBvcDEsIGludCBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENv
bmRpdGlvbiBjb25kaXRpb24pCit0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Cit2b2lkIEpJVDo6ZW1p
dF9jb21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9u
YWxDb25kaXRpb24gY29uZGl0aW9uKQogewogICAgIEp1bXBMaXN0IG5vdEludDMyT3AxOwogICAg
IEp1bXBMaXN0IG5vdEludDMyT3AyOwogCisgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9u
LT5hczxPcD4oKTsKKyAgICBpbnQgb3AxID0gYnl0ZWNvZGUubGhzLm9mZnNldCgpOworICAgIGlu
dCBvcDIgPSBieXRlY29kZS5yaHMub2Zmc2V0KCk7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVt
cFRhcmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUudGFyZ2V0KTsKKwogICAgIC8vIENoYXJhY3Rl
ciBsZXNzLgogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIob3AxKSkgewogICAgICAgICBl
bWl0TG9hZChvcDIsIHJlZ1QxLCByZWdUMCk7CkBAIC04OCwxMiArOTQsMTggQEAgdm9pZCBKSVQ6
OmVtaXRfY29tcGFyZUFuZEp1bXAoT3Bjb2RlSUQgb3Bjb2RlLCBpbnQgb3AxLCBpbnQgb3AyLCB1
bnNpZ25lZCB0YXJnZXQKICAgICBKdW1wIGVuZCA9IGp1bXAoKTsKIAogICAgIC8vIERvdWJsZSBs
ZXNzLgotICAgIGVtaXRCaW5hcnlEb3VibGVPcChvcGNvZGUsIHRhcmdldCwgb3AxLCBvcDIsIE9w
ZXJhbmRUeXBlcygpLCBub3RJbnQzMk9wMSwgbm90SW50MzJPcDIsICFpc09wZXJhbmRDb25zdGFu
dEludChvcDEpLCBpc09wZXJhbmRDb25zdGFudEludChvcDEpIHx8ICFpc09wZXJhbmRDb25zdGFu
dEludChvcDIpKTsKKyAgICBlbWl0QmluYXJ5RG91YmxlT3A8T3A+KGluc3RydWN0aW9uLCBPcGVy
YW5kVHlwZXMoKSwgbm90SW50MzJPcDEsIG5vdEludDMyT3AyLCAhaXNPcGVyYW5kQ29uc3RhbnRJ
bnQob3AxKSwgaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSB8fCAhaXNPcGVyYW5kQ29uc3RhbnRJ
bnQob3AyKSk7CiAgICAgZW5kLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0X2NvbXBh
cmVVbnNpZ25lZEFuZEp1bXAoaW50IG9wMSwgaW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxh
dGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQg
SklUOjplbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3Ry
dWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKKyAgICBhdXRvIGJ5dGVj
b2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOworICAgIGludCBvcDEgPSBieXRlY29kZS5saHMu
b2Zmc2V0KCk7CisgICAgaW50IG9wMiA9IGJ5dGVjb2RlLnJocy5vZmZzZXQoKTsKKyAgICB1bnNp
Z25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS50YXJnZXQpOwor
CiAgICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKICAgICAgICAgZW1pdExvYWQo
b3AyLCByZWdUMywgcmVnVDIpOwogICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbW11dGUoY29u
ZGl0aW9uKSwgcmVnVDIsIEltbTMyKGdldENvbnN0YW50T3BlcmFuZChvcDEpLmFzSW50MzIoKSkp
LCB0YXJnZXQpOwpAQCAtMTA2LDkgKzExOCwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5z
aWduZWRBbmRKdW1wKGludCBvcDEsIGludCBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpbwog
ICAgIH0KIH0KIAotCi12b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWQoaW50IGRzdCwgaW50
IG9wMSwgaW50IG9wMiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit0ZW1wbGF0ZSA8
dHlwZW5hbWUgT3A+Cit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3QgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKKyAg
ICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOworICAgIGludCBkc3QgPSBi
eXRlY29kZS5kc3Qub2Zmc2V0KCk7CisgICAgaW50IG9wMSA9IGJ5dGVjb2RlLmxocy5vZmZzZXQo
KTsKKyAgICBpbnQgb3AyID0gYnl0ZWNvZGUucmhzLm9mZnNldCgpOworCiAgICAgaWYgKGlzT3Bl
cmFuZENvbnN0YW50SW50KG9wMSkpIHsKICAgICAgICAgZW1pdExvYWQob3AyLCByZWdUMywgcmVn
VDIpOwogICAgICAgICBjb21wYXJlMzIoY29tbXV0ZShjb25kaXRpb24pLCByZWdUMiwgSW1tMzIo
Z2V0Q29uc3RhbnRPcGVyYW5kKG9wMSkuYXNJbnQzMigpKSwgcmVnVDApOwpAQCAtMTIyLDggKzEz
OSwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWQoaW50IGRzdCwgaW50IG9wMSwg
aW50IG9wMiwgUmVsYXRpb25hbENvbmRpdGlvbiBjbwogICAgIGVtaXRTdG9yZUJvb2woZHN0LCBy
ZWdUMCk7CiB9CiAKLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhpbnQgb3AxLCBp
bnQgb3AyLCB1bnNpZ25lZCB0YXJnZXQsIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BF
UkFUSU9OICpvcGVyYXRpb24pKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNW
YWx1ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQordGVtcGxhdGUgPHR5cGVuYW1lIE9wPgordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBT
bG93KGNvbnN0IEluc3RydWN0aW9uICppbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uLCBzaXpl
X3QgKEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUs
IEVuY29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCiB7CisgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4o
KTsKKyAgICBpbnQgb3AxID0gYnl0ZWNvZGUubGhzLm9mZnNldCgpOworICAgIGludCBvcDIgPSBi
eXRlY29kZS5yaHMub2Zmc2V0KCk7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChp
bnN0cnVjdGlvbiwgYnl0ZWNvZGUudGFyZ2V0KTsKKwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7CiAKICAgICBlbWl0TG9hZChvcDEsIHJlZ1QxLCByZWdUMCk7CkBAIC0xMzIsMTAgKzE1NSwx
MSBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coaW50IG9wMSwgaW50IG9wMiwg
dW5zaWduZWQgdGFyZ2V0LCBEb3VibGVDb25kaQogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5j
aFRlc3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQp
OwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF91bnNpZ25lZChJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfdW5zaWduZWQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBpbnQgcmVzdWx0ID0gY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgb3AxID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUu
b3BlcmFuZDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFVu
c2lnbmVkPigpOworICAgIGludCByZXN1bHQgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7CisgICAg
aW50IG9wMSA9IGJ5dGVjb2RlLm9wZXJhbmQub2Zmc2V0KCk7CiAgICAgCiAgICAgZW1pdExvYWQo
b3AxLCByZWdUMSwgcmVnVDApOwogICAgIApAQCAtMTQ0LDkgKzE2OCwxMCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF91bnNpZ25lZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGVt
aXRTdG9yZUludDMyKHJlc3VsdCwgcmVnVDAsIHJlc3VsdCA9PSBvcDEpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdF9vcF9pbmMoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklU
OjplbWl0X29wX2luYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewot
ICAgIGludCBzcmNEc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5jPigpOworICAgIGludCBz
cmNEc3QgPSBieXRlY29kZS5zcmNEc3Qub2Zmc2V0KCk7CiAKICAgICBlbWl0TG9hZChzcmNEc3Qs
IHJlZ1QxLCByZWdUMCk7CiAKQEAgLTE1NSw5ICsxODAsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bf
aW5jKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdFN0b3JlSW50MzIo
c3JjRHN0LCByZWdUMCwgdHJ1ZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2RlYyhJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfZGVjKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaW50IHNyY0RzdCA9IGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BEZWM+KCk7CisgICAgaW50IHNyY0RzdCA9IGJ5dGVjb2RlLnNyY0Rz
dC5vZmZzZXQoKTsKIAogICAgIGVtaXRMb2FkKHNyY0RzdCwgcmVnVDEsIHJlZ1QwKTsKIApAQCAt
MTY2LDEwICsxOTIsMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVjKEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdFN0b3JlSW50MzIoc3JjRHN0LCByZWdUMCwgdHJ1ZSk7
CiB9CiAKLXZvaWQgSklUOjplbWl0QmluYXJ5RG91YmxlT3AoT3Bjb2RlSUQgb3Bjb2RlSUQsIGlu
dCBkc3QsIGludCBvcDEsIGludCBvcDIsIE9wZXJhbmRUeXBlcyB0eXBlcywgSnVtcExpc3QmIG5v
dEludDMyT3AxLCBKdW1wTGlzdCYgbm90SW50MzJPcDIsIGJvb2wgb3AxSXNJblJlZ2lzdGVycywg
Ym9vbCBvcDJJc0luUmVnaXN0ZXJzKQordGVtcGxhdGUgPHR5cGVuYW1lIE9wPgordm9pZCBKSVQ6
OmVtaXRCaW5hcnlEb3VibGVPcChjb25zdCBJbnN0cnVjdGlvbiAqaW5zdHJ1Y3Rpb24sIE9wZXJh
bmRUeXBlcyB0eXBlcywgSnVtcExpc3QmIG5vdEludDMyT3AxLCBKdW1wTGlzdCYgbm90SW50MzJP
cDIsIGJvb2wgb3AxSXNJblJlZ2lzdGVycywgYm9vbCBvcDJJc0luUmVnaXN0ZXJzKQogewogICAg
IEp1bXBMaXN0IGVuZDsKIAorICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+
KCk7CisgICAgaW50IG9wY29kZUlEID0gT3A6Om9wY29kZUlEOworICAgIGludCB0YXJnZXQgPSBq
dW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS50YXJnZXQpOworICAgIGludCBvcDEgPSBi
eXRlY29kZS5saHMub2Zmc2V0KCk7CisgICAgaW50IG9wMiA9IGJ5dGVjb2RlLnJocy5vZmZzZXQo
KTsKKwogICAgIGlmICghbm90SW50MzJPcDEuZW1wdHkoKSkgewogICAgICAgICAvLyBEb3VibGUg
Y2FzZSAxOiBPcDEgaXMgbm90IGludDMyOyBPcDIgaXMgdW5rbm93bi4KICAgICAgICAgbm90SW50
MzJPcDEubGluayh0aGlzKTsKQEAgLTIwMCwzNSArMjMzLDM1IEBAIHZvaWQgSklUOjplbWl0Qmlu
YXJ5RG91YmxlT3AoT3Bjb2RlSUQgb3Bjb2RlSUQsIGludCBkc3QsIGludCBvcDEsIGludCBvcDIs
IE9wZXJhCiAgICAgICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKICAgICAgICAgICAgIGNhc2Ugb3Bf
amxlc3M6CiAgICAgICAgICAgICAgICAgZW1pdExvYWREb3VibGUob3AxLCBmcFJlZ1QyKTsKLSAg
ICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShEb3VibGVMZXNzVGhhbiwgZnBSZWdU
MiwgZnBSZWdUMCksIGRzdCk7CisgICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUo
RG91YmxlTGVzc1RoYW4sIGZwUmVnVDIsIGZwUmVnVDApLCB0YXJnZXQpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBvcF9qbGVzc2VxOgogICAgICAgICAgICAgICAg
IGVtaXRMb2FkRG91YmxlKG9wMSwgZnBSZWdUMik7Ci0gICAgICAgICAgICAgICAgYWRkSnVtcChi
cmFuY2hEb3VibGUoRG91YmxlTGVzc1RoYW5PckVxdWFsLCBmcFJlZ1QyLCBmcFJlZ1QwKSwgZHN0
KTsKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShEb3VibGVMZXNzVGhhbk9y
RXF1YWwsIGZwUmVnVDIsIGZwUmVnVDApLCB0YXJnZXQpOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgY2FzZSBvcF9qZ3JlYXRlcjoKICAgICAgICAgICAgICAgICBlbWl0TG9h
ZERvdWJsZShvcDEsIGZwUmVnVDIpOwotICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91
YmxlKERvdWJsZUdyZWF0ZXJUaGFuLCBmcFJlZ1QyLCBmcFJlZ1QwKSwgZHN0KTsKKyAgICAgICAg
ICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShEb3VibGVHcmVhdGVyVGhhbiwgZnBSZWdUMiwg
ZnBSZWdUMCksIHRhcmdldCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBj
YXNlIG9wX2pncmVhdGVyZXE6CiAgICAgICAgICAgICAgICAgZW1pdExvYWREb3VibGUob3AxLCBm
cFJlZ1QyKTsKLSAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShEb3VibGVHcmVh
dGVyVGhhbk9yRXF1YWwsIGZwUmVnVDIsIGZwUmVnVDApLCBkc3QpOworICAgICAgICAgICAgICAg
IGFkZEp1bXAoYnJhbmNoRG91YmxlKERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbCwgZnBSZWdUMiwg
ZnBSZWdUMCksIHRhcmdldCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBj
YXNlIG9wX2pubGVzczoKICAgICAgICAgICAgICAgICBlbWl0TG9hZERvdWJsZShvcDEsIGZwUmVn
VDIpOwotICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKERvdWJsZUxlc3NUaGFu
T3JFcXVhbE9yVW5vcmRlcmVkLCBmcFJlZ1QwLCBmcFJlZ1QyKSwgZHN0KTsKKyAgICAgICAgICAg
ICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJl
ZCwgZnBSZWdUMCwgZnBSZWdUMiksIHRhcmdldCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICBjYXNlIG9wX2pubGVzc2VxOgogICAgICAgICAgICAgICAgIGVtaXRMb2FkRG91
YmxlKG9wMSwgZnBSZWdUMik7Ci0gICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUo
RG91YmxlTGVzc1RoYW5PclVub3JkZXJlZCwgZnBSZWdUMCwgZnBSZWdUMiksIGRzdCk7CisgICAg
ICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlTGVzc1RoYW5PclVub3JkZXJl
ZCwgZnBSZWdUMCwgZnBSZWdUMiksIHRhcmdldCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgICAgICBjYXNlIG9wX2puZ3JlYXRlcjoKICAgICAgICAgICAgICAgICBlbWl0TG9hZERv
dWJsZShvcDEsIGZwUmVnVDIpOwotICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91Ymxl
KERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBmcFJlZ1QwLCBmcFJlZ1QyKSwg
ZHN0KTsKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShEb3VibGVHcmVhdGVy
VGhhbk9yRXF1YWxPclVub3JkZXJlZCwgZnBSZWdUMCwgZnBSZWdUMiksIHRhcmdldCk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIG9wX2puZ3JlYXRlcmVxOgogICAg
ICAgICAgICAgICAgIGVtaXRMb2FkRG91YmxlKG9wMSwgZnBSZWdUMik7Ci0gICAgICAgICAgICAg
ICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZCwgZnBS
ZWdUMCwgZnBSZWdUMiksIGRzdCk7CisgICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3Vi
bGUoRG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZCwgZnBSZWdUMCwgZnBSZWdUMiksIHRhcmdl
dCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0yNTcsMzUgKzI5MCwz
NSBAQCB2b2lkIEpJVDo6ZW1pdEJpbmFyeURvdWJsZU9wKE9wY29kZUlEIG9wY29kZUlELCBpbnQg
ZHN0LCBpbnQgb3AxLCBpbnQgb3AyLCBPcGVyYQogICAgICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7
CiAgICAgICAgICAgICBjYXNlIG9wX2psZXNzOgogICAgICAgICAgICAgICAgIGVtaXRMb2FkRG91
YmxlKG9wMiwgZnBSZWdUMSk7Ci0gICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUo
RG91YmxlTGVzc1RoYW4sIGZwUmVnVDAsIGZwUmVnVDEpLCBkc3QpOworICAgICAgICAgICAgICAg
IGFkZEp1bXAoYnJhbmNoRG91YmxlKERvdWJsZUxlc3NUaGFuLCBmcFJlZ1QwLCBmcFJlZ1QxKSwg
dGFyZ2V0KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ugb3Bfamxl
c3NlcToKICAgICAgICAgICAgICAgICBlbWl0TG9hZERvdWJsZShvcDIsIGZwUmVnVDEpOwotICAg
ICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKERvdWJsZUxlc3NUaGFuT3JFcXVhbCwg
ZnBSZWdUMCwgZnBSZWdUMSksIGRzdCk7CisgICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hE
b3VibGUoRG91YmxlTGVzc1RoYW5PckVxdWFsLCBmcFJlZ1QwLCBmcFJlZ1QxKSwgdGFyZ2V0KTsK
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ugb3BfamdyZWF0ZXI6CiAg
ICAgICAgICAgICAgICAgZW1pdExvYWREb3VibGUob3AyLCBmcFJlZ1QxKTsKLSAgICAgICAgICAg
ICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShEb3VibGVHcmVhdGVyVGhhbiwgZnBSZWdUMCwgZnBS
ZWdUMSksIGRzdCk7CisgICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91Ymxl
R3JlYXRlclRoYW4sIGZwUmVnVDAsIGZwUmVnVDEpLCB0YXJnZXQpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgY2FzZSBvcF9qZ3JlYXRlcmVxOgogICAgICAgICAgICAgICAg
IGVtaXRMb2FkRG91YmxlKG9wMiwgZnBSZWdUMSk7Ci0gICAgICAgICAgICAgICAgYWRkSnVtcChi
cmFuY2hEb3VibGUoRG91YmxlR3JlYXRlclRoYW5PckVxdWFsLCBmcFJlZ1QwLCBmcFJlZ1QxKSwg
ZHN0KTsKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShEb3VibGVHcmVhdGVy
VGhhbk9yRXF1YWwsIGZwUmVnVDAsIGZwUmVnVDEpLCB0YXJnZXQpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgY2FzZSBvcF9qbmxlc3M6CiAgICAgICAgICAgICAgICAgZW1p
dExvYWREb3VibGUob3AyLCBmcFJlZ1QxKTsKLSAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5j
aERvdWJsZShEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZCwgZnBSZWdUMSwgZnBSZWdU
MCksIGRzdCk7CisgICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlTGVz
c1RoYW5PckVxdWFsT3JVbm9yZGVyZWQsIGZwUmVnVDEsIGZwUmVnVDApLCB0YXJnZXQpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBvcF9qbmxlc3NlcToKICAgICAg
ICAgICAgICAgICBlbWl0TG9hZERvdWJsZShvcDIsIGZwUmVnVDEpOwotICAgICAgICAgICAgICAg
IGFkZEp1bXAoYnJhbmNoRG91YmxlKERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQsIGZwUmVnVDEs
IGZwUmVnVDApLCBkc3QpOworICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKERv
dWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQsIGZwUmVnVDEsIGZwUmVnVDApLCB0YXJnZXQpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBvcF9qbmdyZWF0ZXI6CiAgICAg
ICAgICAgICAgICAgZW1pdExvYWREb3VibGUob3AyLCBmcFJlZ1QxKTsKLSAgICAgICAgICAgICAg
ICBhZGRKdW1wKGJyYW5jaERvdWJsZShEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJl
ZCwgZnBSZWdUMSwgZnBSZWdUMCksIGRzdCk7CisgICAgICAgICAgICAgICAgYWRkSnVtcChicmFu
Y2hEb3VibGUoRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQsIGZwUmVnVDEsIGZw
UmVnVDApLCB0YXJnZXQpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2Fz
ZSBvcF9qbmdyZWF0ZXJlcToKICAgICAgICAgICAgICAgICBlbWl0TG9hZERvdWJsZShvcDIsIGZw
UmVnVDEpOwotICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKERvdWJsZUdyZWF0
ZXJUaGFuT3JVbm9yZGVyZWQsIGZwUmVnVDEsIGZwUmVnVDApLCBkc3QpOworICAgICAgICAgICAg
ICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQsIGZw
UmVnVDEsIGZwUmVnVDApLCB0YXJnZXQpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOwpAQCAtMjk5LDEyICszMzIsMTMgQEAgdm9pZCBKSVQ6OmVtaXRCaW5hcnlEb3VibGVPcChP
cGNvZGVJRCBvcGNvZGVJRCwgaW50IGRzdCwgaW50IG9wMSwgaW50IG9wMiwgT3BlcmEKIAogLyog
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEJFR0lOOiBPUF9NT0QgLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXZvaWQgSklUOjplbWl0X29wX21vZChJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfbW9kKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAjaWYgQ1BVKFg4NikKLSAgICBpbnQgZHN0
ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgb3AxID0gY3VycmVu
dEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICBpbnQgb3AyID0gY3VycmVudEluc3RydWN0
aW9uWzNdLnUub3BlcmFuZDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9w
TW9kPigpOworICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7CisgICAgaW50IG9w
MSA9IGJ5dGVjb2RlLmxocy5vZmZzZXQoKTsKKyAgICBpbnQgb3AyID0gYnl0ZWNvZGUucmhzLm9m
ZnNldCgpOwogCiAgICAgLy8gTWFrZSBzdXJlIHJlZ2lzdGVycyBhcmUgY29ycmVjdCBmb3IgeDg2
IElESVYgaW5zdHJ1Y3Rpb25zLgogICAgIEFTU0VSVChyZWdUMCA9PSBYODZSZWdpc3RlcnM6OmVh
eCk7CkBAIC0zMzMsNyArMzY3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbW9kKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAjZW5kaWYKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X21vZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRy
eT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQogewogI2lmIENQVShYODYpCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcCBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAppbmRleCBhZWZhZWNj
YTc1NjAxNDNlMjQ0ZGQzODkyOGY5MDg5Mjk5NTdjNjc1Li4wOWM0ZDAzOTU1N2ZiNmM0ZTUzYTJl
NjExMzE3ZjdlMzA5YWQ3NGI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVENhbGwzMl82NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxs
MzJfNjQuY3BwCkBAIC00NSwxOCArNDUsMTkgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXZvaWQg
SklUOjplbWl0UHV0Q2FsbFJlc3VsdChJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCit0ZW1wbGF0
ZTx0eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYgYnl0
ZWNvZGUpCiB7Ci0gICAgaW50IGRzdCA9IGluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBl
bWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7Ci0gICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1Qw
KTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJs
b2NrKSk7CisgICAgZW1pdFN0b3JlKGJ5dGVjb2RlLmRzdC5vZmZzZXQoKSwgcmVnVDEsIHJlZ1Qw
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKLSAgICB1bnNpZ25lZCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
UmV0PigpOworICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLnZhbHVlLm9mZnNldCgpOwogCi0gICAg
ZW1pdExvYWQoZHN0LCByZWdUMSwgcmVnVDApOworICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMSwg
cmVnVDApOwogCiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKICAgICBlbWl0UmVz
dG9yZUNhbGxlZVNhdmVzKCk7CkBAIC02NCw5NiArNjUsMTI1IEBAIHZvaWQgSklUOjplbWl0X29w
X3JldChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIHJldCgpOwogfQogCi12
b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBjb21waWxlT3BDYWxsU2xv
d0Nhc2Uob3BfY2FsbCwgY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0lu
ZGV4KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGw+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3RhaWxfY2FsbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3Rh
aWxfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2Fz
ZShvcF90YWlsX2NhbGwsIGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9J
bmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbD4oY3VycmVudElu
c3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfY2FsbF9ldmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3df
b3BfY2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNs
b3dDYXNlKG9wX2NhbGxfZXZhbCwgY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5r
SW5mb0luZGV4KTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsRXZhbD4oY3VycmVu
dEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KTsKIH0KICAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0
U2xvd19vcF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBjb21waWxl
T3BDYWxsU2xvd0Nhc2Uob3BfY2FsbF92YXJhcmdzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIs
IG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2Fs
bFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsr
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF92YXJhcmdzKEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3Im
IGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2Uob3BfdGFpbF9jYWxsX3Zh
cmFyZ3MsIGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsK
KyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0
cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZShvcF90YWlsX2NhbGxfZm9y
d2FyZF9hcmd1bWVudHMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9J
bmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbEZvcndhcmRBcmd1
bWVudHM+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsK
IH0KICAgICAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlKG9wX2NvbnN0cnVjdF92
YXJhcmdzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7
CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0VmFyYXJncz4oY3VycmVudElu
c3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogICAgIAotdm9pZCBK
SVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGNvbXBpbGVPcENh
bGxTbG93Q2FzZShvcF9jb25zdHJ1Y3QsIGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxs
TGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3Q+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAot
dm9pZCBKSVQ6OmVtaXRfb3BfY2FsbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQor
dm9pZCBKSVQ6OmVtaXRfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewotICAgIGNvbXBpbGVPcENhbGwob3BfY2FsbCwgY3VycmVudEluc3RydWN0aW9uLCBt
X2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGw8T3BDYWxsPihjdXJyZW50
SW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0
X29wX3RhaWxfY2FsbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6
OmVtaXRfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7Ci0gICAgY29tcGlsZU9wQ2FsbChvcF90YWlsX2NhbGwsIGN1cnJlbnRJbnN0cnVjdGlvbiwg
bV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsPE9wVGFpbENhbGw+KGN1
cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRfb3BfY2FsbF9ldmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lk
IEpJVDo6ZW1pdF9vcF9jYWxsX2V2YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKLSAgICBjb21waWxlT3BDYWxsKG9wX2NhbGxfZXZhbCwgY3VycmVudEluc3RydWN0
aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4KTsKKyAgICBjb21waWxlT3BDYWxsPE9wQ2FsbEV2YWw+
KGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCk7CiB9CiAKLXZvaWQgSklU
OjplbWl0X29wX2NhbGxfdmFyYXJncyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQor
dm9pZCBKSVQ6OmVtaXRfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgY29tcGlsZU9wQ2FsbChvcF9jYWxsX3ZhcmFyZ3MsIGN1cnJl
bnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxs
PE9wQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsr
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX3RhaWxfY2FsbF92YXJhcmdz
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgY29tcGlsZU9w
Q2FsbChvcF90YWlsX2NhbGxfdmFyYXJncywgY3VycmVudEluc3RydWN0aW9uLCBtX2NhbGxMaW5r
SW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGw8T3BUYWlsQ2FsbFZhcmFyZ3M+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBjb21waWxlT3BD
YWxsKG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cywgY3VycmVudEluc3RydWN0aW9uLCBt
X2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGw8T3BUYWlsQ2FsbEZvcndh
cmRBcmd1bWVudHM+KGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsK
IH0KICAgICAKLXZvaWQgSklUOjplbWl0X29wX2NvbnN0cnVjdF92YXJhcmdzKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9jb25zdHJ1Y3RfdmFyYXJn
cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGNvbXBpbGVP
cENhbGwob3BfY29uc3RydWN0X3ZhcmFyZ3MsIGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlu
a0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsPE9wQ29uc3RydWN0VmFyYXJncz4oY3Vy
cmVudEluc3RydWN0aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogICAgIAotdm9pZCBK
SVQ6OmVtaXRfb3BfY29uc3RydWN0KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2
b2lkIEpJVDo6ZW1pdF9vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKLSAgICBjb21waWxlT3BDYWxsKG9wX2NvbnN0cnVjdCwgY3VycmVudEluc3Ry
dWN0aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGw8T3BDb25z
dHJ1Y3Q+KGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAot
dm9pZCBKSVQ6OmNvbXBpbGVTZXR1cFZhcmFyZ3NGcmFtZShPcGNvZGVJRCBvcGNvZGUsIEluc3Ry
dWN0aW9uKiBpbnN0cnVjdGlvbiwgQ2FsbExpbmtJbmZvKiBpbmZvKQordGVtcGxhdGUgPHR5cGVu
YW1lIE9wPgorc3RkOjplbmFibGVfaWZfdDwKKyAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92
YXJhcmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncworICAgICYmIE9w
OjpvcGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3Bf
dGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzCissIHZvaWQ+CitKSVQ6OmNvbXBpbGVTZXR1cEZy
YW1lKGNvbnN0IE9wJiBieXRlY29kZSwgQ2FsbExpbmtJbmZvKikKIHsKLSAgICBpbnQgdGhpc1Zh
bHVlID0gaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgIGludCBhcmd1bWVudHMgPSBpbnN0
cnVjdGlvbls0XS51Lm9wZXJhbmQ7Ci0gICAgaW50IGZpcnN0RnJlZVJlZ2lzdGVyID0gaW5zdHJ1
Y3Rpb25bNV0udS5vcGVyYW5kOwotICAgIGludCBmaXJzdFZhckFyZ09mZnNldCA9IGluc3RydWN0
aW9uWzZdLnUub3BlcmFuZDsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKKyAgICBpbnQgYXJnQ291bnQgPSBieXRlY29kZS5hcmdjOworICAgIGlu
dCByZWdpc3Rlck9mZnNldCA9IC1zdGF0aWNfY2FzdDxpbnQ+KGJ5dGVjb2RlLmFyZ3YpOworCisg
ICAgaWYgKE9wOjpvcGNvZGVJRCA9PSBvcF9jYWxsICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkg
eworICAgICAgICBlbWl0TG9hZChyZWdpc3Rlck9mZnNldCArIENhbGxGcmFtZTo6YXJndW1lbnRP
ZmZzZXRJbmNsdWRpbmdUaGlzKDApLCByZWdUMCwgcmVnVDEpOworICAgICAgICBKdW1wIGRvbmUg
PSBicmFuY2hJZk5vdENlbGwocmVnVDApOworICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwg
SlNDZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICBzdG9yZTMyKHJl
Z1QxLCBtZXRhZGF0YS5hcnJheVByb2ZpbGUuYWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgp
KTsKKyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgIH0KKworICAgIGFkZFB0cihUcnVzdGVk
SW1tMzIocmVnaXN0ZXJPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsgc2l6ZW9mKENhbGxlckZy
YW1lQW5kUEMpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAg
ICBzdG9yZTMyKFRydXN0ZWRJbW0zMihhcmdDb3VudCksIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVn
aXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNp
emVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBD
KSkpOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KK3N0ZDo6ZW5hYmxlX2lmX3Q8CisgICAg
T3A6Om9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfY29u
c3RydWN0X3ZhcmFyZ3MKKyAgICB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFy
Z3MgfHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cworLCB2
b2lkPgorSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIENhbGxMaW5r
SW5mbyogaW5mbykKK3sKKyAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKKyAg
ICBpbnQgdGhpc1ZhbHVlID0gYnl0ZWNvZGUudGhpc1ZhbHVlLm9mZnNldCgpOworICAgIGludCBh
cmd1bWVudHMgPSBieXRlY29kZS5hcmd1bWVudHMub2Zmc2V0KCk7CisgICAgaW50IGZpcnN0RnJl
ZVJlZ2lzdGVyID0gYnl0ZWNvZGUuZmlyc3RGcmVlLm9mZnNldCgpOworICAgIGludCBmaXJzdFZh
ckFyZ09mZnNldCA9IGJ5dGVjb2RlLmZpcnN0VmFyQXJnOwogCiAgICAgZW1pdExvYWQoYXJndW1l
bnRzLCByZWdUMSwgcmVnVDApOwogICAgIFpfSklUT3BlcmF0aW9uX0VKWlogc2l6ZU9wZXJhdGlv
bjsKLSAgICBpZiAob3Bjb2RlID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKKyAg
ICBpZiAoT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAg
ICAgICAgc2l6ZU9wZXJhdGlvbiA9IG9wZXJhdGlvblNpemVGcmFtZUZvckZvcndhcmRBcmd1bWVu
dHM7CiAgICAgZWxzZQogICAgICAgICBzaXplT3BlcmF0aW9uID0gb3BlcmF0aW9uU2l6ZUZyYW1l
Rm9yVmFyYXJnczsKQEAgLTE2Myw3ICsxOTMsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZVNldHVwVmFy
YXJnc0ZyYW1lKE9wY29kZUlEIG9wY29kZSwgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBDYQog
ICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLShzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgKyBXVEY6
OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCA2ICogc2l6ZW9mKHZv
aWQqKSkpKSwgcmVnVDEsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBlbWl0TG9hZChhcmd1
bWVudHMsIHJlZ1QyLCByZWdUNCk7CiAgICAgRl9KSVRPcGVyYXRpb25fRUZKWlogc2V0dXBPcGVy
YXRpb247Ci0gICAgaWYgKG9wY29kZSA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMp
CisgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAg
ICAgICAgc2V0dXBPcGVyYXRpb24gPSBvcGVyYXRpb25TZXR1cEZvcndhcmRBcmd1bWVudHNGcmFt
ZTsKICAgICBlbHNlCiAgICAgICAgIHNldHVwT3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0dXBWYXJh
cmdzRnJhbWU7CkBAIC0xODUsNyArMjE1LDE0IEBAIHZvaWQgSklUOjpjb21waWxlU2V0dXBWYXJh
cmdzRnJhbWUoT3Bjb2RlSUQgb3Bjb2RlLCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIENhCiAg
ICAgYWRkUHRyKFRydXN0ZWRJbW0zMihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCByZWdUMSwg
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogfQogCi12b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsKElu
c3RydWN0aW9uKiBpbnN0cnVjdGlvbikKK3RlbXBsYXRlPHR5cGVuYW1lIE9wPgorYm9vbCBKSVQ6
OmNvbXBpbGVDYWxsRXZhbChjb25zdCBPcCYpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit0
ZW1wbGF0ZTw+Citib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wQ2FsbEV2YWwmIGJ5
dGVjb2RlKQogewogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PHB0cmRpZmZf
dD4oc2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyLCByZWdU
MSk7CiAgICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3MocmVnVDEsIENhbGxG
cmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOwpAQCAtMTk4LDE4ICsyMzUsMjEgQEAgdm9pZCBK
SVQ6OmNvbXBpbGVDYWxsRXZhbChJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiAKICAgICBzYW1w
bGVDb2RlQmxvY2sobV9jb2RlQmxvY2spOwogICAgIAotICAgIGVtaXRQdXRDYWxsUmVzdWx0KGlu
c3RydWN0aW9uKTsKKyAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CisKKyAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKEluc3RydWN0
aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAg
bGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAorICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlv
bi0+YXM8T3BDYWxsRXZhbD4oKTsKICAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2NvZGVCbG9j
ay0+YWRkQ2FsbExpbmtJbmZvKCk7CiAgICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6
Q2FsbCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwgcmVnVDApOwogCi0gICAgaW50IHJl
Z2lzdGVyT2Zmc2V0ID0gLWluc3RydWN0aW9uWzRdLnUub3BlcmFuZDsKLSAgICBpbnQgY2FsbGVl
ID0gaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1i
eXRlY29kZS5hcmd2OworICAgIGludCBjYWxsZWUgPSBieXRlY29kZS5jYWxsZWUub2Zmc2V0KCk7
CiAKICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHJlZ2lzdGVyT2Zmc2V0ICogc2l6ZW9mKFJlZ2lz
dGVyKSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFj
a1BvaW50ZXJSZWdpc3Rlcik7CiAKQEAgLTIyMCwxMiArMjYwLDE1IEBAIHZvaWQgSklUOjpjb21w
aWxlQ2FsbEV2YWxTbG93Q2FzZShJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5CiAKICAgICBzYW1wbGVDb2RlQmxvY2sobV9jb2RlQmxvY2spOwogICAgIAotICAg
IGVtaXRQdXRDYWxsUmVzdWx0KGluc3RydWN0aW9uKTsKKyAgICBlbWl0UHV0Q2FsbFJlc3VsdChi
eXRlY29kZSk7CiB9CiAKLXZvaWQgSklUOjpjb21waWxlT3BDYWxsKE9wY29kZUlEIG9wY29kZUlE
LCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQor
dGVtcGxhdGUgPHR5cGVuYW1lIE9wPgordm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5z
dHJ1Y3Rpb24qIGluc3RydWN0aW9uLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKIHsKLSAg
ICBpbnQgY2FsbGVlID0gaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIE9wY29kZUlEIG9w
Y29kZUlEID0gT3A6Om9wY29kZUlEOworICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+
YXM8T3A+KCk7CisgICAgaW50IGNhbGxlZSA9IGJ5dGVjb2RlLmNhbGxlZS5vZmZzZXQoKTsKIAog
ICAgIC8qIENhbGxlciBhbHdheXM6CiAgICAgICAgIC0gVXBkYXRlcyBjYWxsRnJhbWVSZWdpc3Rl
ciB0byBjYWxsZWUgY2FsbEZyYW1lLgpAQCAtMjQyLDI0ICsyODUsOCBAQCB2b2lkIEpJVDo6Y29t
cGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJRCwgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCB1
bnNpZ25lZCBjYQogICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG51bGxwdHI7CiAgICAgaWYgKG9w
Y29kZUlEICE9IG9wX2NhbGxfZXZhbCkKICAgICAgICAgaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRD
YWxsTGlua0luZm8oKTsKLSAgICBpZiAob3Bjb2RlSUQgPT0gb3BfY2FsbF92YXJhcmdzIHx8IG9w
Y29kZUlEID09IG9wX2NvbnN0cnVjdF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2Fs
bF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykK
LSAgICAgICAgY29tcGlsZVNldHVwVmFyYXJnc0ZyYW1lKG9wY29kZUlELCBpbnN0cnVjdGlvbiwg
aW5mbyk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGludCBhcmdDb3VudCA9IGluc3RydWN0aW9uWzNd
LnUub3BlcmFuZDsKLSAgICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLWluc3RydWN0aW9uWzRd
LnUub3BlcmFuZDsKLSAgICAgICAgCi0gICAgICAgIGlmIChvcGNvZGVJRCA9PSBvcF9jYWxsICYm
IHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICAgICAgZW1pdExvYWQocmVnaXN0ZXJP
ZmZzZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcygwKSwgcmVnVDAs
IHJlZ1QxKTsKLSAgICAgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7
Ci0gICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTQ2VsbDo6c3RydWN0dXJlSURP
ZmZzZXQoKSksIHJlZ1QxKTsKLSAgICAgICAgICAgIHN0b3JlUHRyKHJlZ1QxLCBhcnJheVByb2Zp
bGVGb3I8T3BDYWxsU2hhcGU+KGluc3RydWN0aW9uKS0+YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1
cmVJRCgpKTsKLSAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKLSAgICAgICAgfQotICAgIAot
ICAgICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHJlZ2lzdGVyT2Zmc2V0ICogc2l6ZW9mKFJlZ2lz
dGVyKSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFj
a1BvaW50ZXJSZWdpc3Rlcik7Ci0KLSAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoYXJnQ291
bnQpLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVu
dENvdW50ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFBheWxvYWRPZmZz
ZXQgLSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKLSAgICB9IC8vIFNQIGhvbGRzIG5ld0Nh
bGxGcmFtZSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSwgd2l0aCBBcmd1bWVudENvdW50IGlu
aXRpYWxpemVkLgorICAgIGNvbXBpbGVTZXR1cEZyYW1lKGJ5dGVjb2RlLCBpbmZvKTsKKyAgICAv
LyBTUCBob2xkcyBuZXdDYWxsRnJhbWUgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyksIHdpdGgg
QXJndW1lbnRDb3VudCBpbml0aWFsaXplZC4KICAgICAKICAgICB1aW50MzJfdCBsb2NhdGlvbkJp
dHMgPSBDYWxsU2l0ZUluZGV4KGluc3RydWN0aW9uKS5iaXRzKCk7CiAgICAgc3RvcmUzMihUcnVz
dGVkSW1tMzIobG9jYXRpb25CaXRzKSwgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291
bnQpKTsKQEAgLTI2OCwxMCArMjk1LDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoT3Bjb2Rl
SUQgb3Bjb2RlSUQsIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgdW5zaWduZWQgY2EKICAgICBz
dG9yZTMyKHJlZ1QwLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90
OjpjYWxsZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9m
ZnNldCAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOwogICAgIHN0b3JlMzIocmVnVDEsIEFk
ZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRp
Y19jYXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBUYWdPZmZzZXQgLSBzaXplb2YoQ2FsbGVy
RnJhbWVBbmRQQykpKTsKIAotICAgIGlmIChvcGNvZGVJRCA9PSBvcF9jYWxsX2V2YWwpIHsKLSAg
ICAgICAgY29tcGlsZUNhbGxFdmFsKGluc3RydWN0aW9uKTsKKyAgICBpZiAoY29tcGlsZUNhbGxF
dmFsKGJ5dGVjb2RlKSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAogICAgIGlmIChvcGNvZGVJ
RCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MpCiAg
ICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKQEAgLTMwMiwxMSArMzI3LDE0IEBAIHZv
aWQgSklUOjpjb21waWxlT3BDYWxsKE9wY29kZUlEIG9wY29kZUlELCBJbnN0cnVjdGlvbiogaW5z
dHJ1Y3Rpb24sIHVuc2lnbmVkIGNhCiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsK
IAogICAgIHNhbXBsZUNvZGVCbG9jayhtX2NvZGVCbG9jayk7Ci0gICAgZW1pdFB1dENhbGxSZXN1
bHQoaW5zdHJ1Y3Rpb24pOworICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKIH0KIAot
dm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShPcGNvZGVJRCBvcGNvZGVJRCwgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
LCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3Zv
aWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCB1bnNpZ25lZCBjYWxs
TGlua0luZm9JbmRleCkKIHsKKyAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsK
KwogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9jYWxsX2V2YWwpIHsKICAgICAgICAgY29tcGlsZUNh
bGxFdmFsU2xvd0Nhc2UoaW5zdHJ1Y3Rpb24sIGl0ZXIpOwogICAgICAgICByZXR1cm47CkBAIC0z
MTYsNyArMzQ0LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShPcGNvZGVJRCBv
cGNvZGVJRCwgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWMKIAogICAgIG1vdmUoVHJ1c3Rl
ZEltbVB0cihtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5r
SW5mbyksIHJlZ1QyKTsKIAotICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bj
b2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MpCisgICAgaWYgKG9wY29kZUlEID09IG9wX3Rh
aWxfY2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9
PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCiAgICAgICAgIGVtaXRSZXN0b3JlQ2Fs
bGVlU2F2ZXMoKTsKIAogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRl
eF0uY2FsbFJldHVybkxvY2F0aW9uID0gZW1pdE5ha2VkQ2FsbChtX3ZtLT5nZXRDVElTdHViKGxp
bmtDYWxsVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CkBAIC0zMzAs
NyArMzU4LDkgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShPcGNvZGVJRCBvcGNv
ZGVJRCwgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWMKICAgICBjaGVja1N0YWNrUG9pbnRl
ckFsaWdubWVudCgpOwogCiAgICAgc2FtcGxlQ29kZUJsb2NrKG1fY29kZUJsb2NrKTsKLSAgICBl
bWl0UHV0Q2FsbFJlc3VsdChpbnN0cnVjdGlvbik7CisKKyAgICBhdXRvIGJ5dGVjb2RlID0gaW5z
dHJ1Y3Rpb24tPmFzPE9wPigpOworICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKIH0K
IAogfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVElubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5o
CmluZGV4IDY4OTc3MDllYTkxZjAyYjVhNTI1MDJjYjk1YTgxZjZhYjI0ZjllMTEuLmQ2YzdiN2Zh
Nzg4Y2MzNjgyNzhjZWRjNjEzNDdlYWQ2ZDMwMWIxMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUSW5saW5lcy5oCkBAIC0yNiw3ICsyNiw2IEBACiAjcHJhZ21hIG9uY2UKIAogI2lmIEVO
QUJMRShKSVQpCi0KICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpA
QCAtMTMxLDcgKzEzMCw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnVwZGF0ZVRvcENhbGxG
cmFtZSgpCiB7CiAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4obV9ieXRlY29kZU9mZnNldCkg
Pj0gMCk7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24gPSAmbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpW21fYnl0ZWNvZGVPZmZzZXRdOyAKKyAg
ICBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25zKCkuYXQobV9ieXRlY29kZU9mZnNldCkucHRyKCk7CiAgICAgdWludDMyX3QgbG9jYXRpb25C
aXRzID0gQ2FsbFNpdGVJbmRleChpbnN0cnVjdGlvbikuYml0cygpOwogI2Vsc2UKICAgICB1aW50
MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVPZmZzZXQpLmJpdHMo
KTsKQEAgLTcwNiw2ICs3MDUsOCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNs
b3dDYXNlSWZOb3ROdW1iZXIoUmVnaXN0ZXJJRCByZWcpCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
SWZOb3ROdW1iZXIocmVnKSk7CiB9CiAKKyNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQorCiBB
TFdBWVNfSU5MSU5FIGludCBKSVQ6Omp1bXBUYXJnZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3Ry
dWN0aW9uLCBpbnQgdGFyZ2V0KQogewogICAgIGlmICh0YXJnZXQpCkBAIC03MzYsOCArNzM3LDYg
QEAgQUxXQVlTX0lOTElORSBBcml0aFByb2ZpbGUgSklUOjpjb3BpZWRBcml0aFByb2ZpbGUoQmlu
YXJ5T3AgYnl0ZWNvZGUpCiAgICAgcmV0dXJuIGFyaXRoUHJvZmlsZTsKIH0KIAotI2VuZGlmIC8v
IFVTRShKU1ZBTFVFMzJfNjQpCi0KIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5B
QkxFKEpJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rl
cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCmluZGV4IGY0
MjcwYmU4YzVhNDFhNjgyNDExZGI1NDBmYzQ0ZDdiMzE5MjcwMmYuLjgwMWE2YTgyMjE1MjdkOGE4
MmYyZTM1MWVjMTgxODM5NWQ3MzY2MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3Bjb2Rlcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGNvZGVzLmNwcApAQCAtMTAxNiw2ICsxMDE2LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2xv
b3BfaGludChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2wK
ICAgICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNp
emUoKSk7CiAgICAgfQogI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oY3VycmVudEluc3RydWN0aW9u
KTsKICAgICBVTlVTRURfUEFSQU0oaXRlcik7CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAppbmRleCBlZjAzMTAyZWM2MTA5NmY5MmY2
NTcxNjA0NjZhNmVjYzc5MjU3YmFkLi44N2MxZmEwNzI5ZTEwYTJiOGRlZTRhNTU3MzJhZDQwYTQ0
NjQxOGFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMz
Ml82NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQu
Y3BwCkBAIC00NywxMCArNDcsMTEgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXZvaWQgSklUOjpl
bWl0X29wX21vdihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVt
aXRfb3BfbW92KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAg
aW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHNyYyA9
IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BNb3Y+KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRz
dC5vZmZzZXQoKTsKKyAgICBpbnQgc3JjID0gYnl0ZWNvZGUuc3JjLm9mZnNldCgpOwogICAgIAog
ICAgIGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSkKICAgICAg
ICAgZW1pdFN0b3JlKGRzdCwgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykpOwpAQCAtNjAsMjQgKzYx
LDI4IEBAIHZvaWQgSklUOjplbWl0X29wX21vdihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfZW5kKEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9lbmQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBBU1NFUlQocmV0dXJuVmFsdWVHUFIgIT0gY2Fs
bEZyYW1lUmVnaXN0ZXIpOwotICAgIGVtaXRMb2FkKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQsIHJlZ1QxLCByZXR1cm5WYWx1ZUdQUik7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BFbmQ+KCk7CisgICAgZW1pdExvYWQoYnl0ZWNvZGUudmFsdWUu
b2Zmc2V0KCksIHJlZ1QxLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFJlc3RvcmVDYWxsZWVT
YXZlcygpOwogICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgcmV0KCk7CiB9CiAKLXZv
aWQgSklUOjplbWl0X29wX2ptcChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9p
ZCBKSVQ6OmVtaXRfb3Bfam1wKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEptcD4oKTsK
KyAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0
ZWNvZGUudGFyZ2V0KTsKICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRfb3BfbmV3X29iamVjdChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQor
dm9pZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY3VycmVudEluc3RydWN0
aW9uWzNdLnUub2JqZWN0QWxsb2NhdGlvblByb2ZpbGUtPnN0cnVjdHVyZSgpOworICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOworICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gbWV0YWRhdGEub2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0
dXJlKCk7CiAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2Nh
dGlvblNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKICAgICBBbGxvY2F0b3IgYWxs
b2NhdG9yID0gc3Vic3BhY2VGb3I8SlNGaW5hbE9iamVjdD4oKm1fdm0pLT5hbGxvY2F0b3JGb3JO
b25WaXJ0dWFsKGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4
aXN0cyk7CiAKQEAgLTkzLDI2ICs5OCwyOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgICAgIGVtaXRBbGxvY2F0ZUpT
T2JqZWN0KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3IpLCBhbGxv
Y2F0b3JSZWcsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBzY3JhdGNoUmVn
LCBzbG93Q2FzZXMpOwogICAgICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0
UmVnLCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwogICAgICAgICBhZGRTbG93Q2FzZShz
bG93Q2FzZXMpOwotICAgICAgICBlbWl0U3RvcmVDZWxsKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQsIHJlc3VsdFJlZyk7CisgICAgICAgIGVtaXRTdG9yZUNlbGwoYnl0ZWNvZGUuZHN0
Lm9mZnNldCgpLCByZXN1bHRSZWcpOwogICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X25ld19vYmplY3QoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2Jq
ZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsK
IAotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub2JqZWN0QWxsb2Nh
dGlvblByb2ZpbGUtPnN0cnVjdHVyZSgpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNv
ZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zm
c2V0KCk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5vYmplY3RBbGxvY2F0
aW9uUHJvZmlsZS5zdHJ1Y3R1cmUoKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld09i
amVjdCwgc3RydWN0dXJlKTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIp
OwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFz
X2luc3RhbmNlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAg
YXV0byYgYnl0ZWNvZGUgPSAqcmVpbnRlcnByZXRfY2FzdDxPcE92ZXJyaWRlc0hhc0luc3RhbmNl
Kj4oY3VycmVudEluc3RydWN0aW9uKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0KCk7Ci0g
ICAgaW50IGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUuY29uc3RydWN0b3IoKTsKLSAgICBpbnQgaGFz
SW5zdGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLmhhc0luc3RhbmNlVmFsdWUoKTsKKyAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE92ZXJyaWRlc0hhc0luc3RhbmNlPigp
OworICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7CisgICAgaW50IGNvbnN0cnVj
dG9yID0gYnl0ZWNvZGUuY29uc3RydWN0b3Iub2Zmc2V0KCk7CisgICAgaW50IGhhc0luc3RhbmNl
VmFsdWUgPSBieXRlY29kZS5oYXNJbnN0YW5jZVZhbHVlLm9mZnNldCgpOwogCiAgICAgZW1pdExv
YWRQYXlsb2FkKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QwKTsKICAgICAvLyBXZSBkb24ndCBqdW1w
IGlmIHdlIGtub3cgd2hhdCBTeW1ib2wuaGFzSW5zdGFuY2Ugd291bGQgZG8uCkBAIC0xMzUsMTIg
KzE0MiwxMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfaW5z
dGFuY2VvZihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRf
b3BfaW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewot
ICAgIGF1dG8mIGJ5dGVjb2RlID0gKnJlaW50ZXJwcmV0X2Nhc3Q8T3BJbnN0YW5jZW9mKj4oY3Vy
cmVudEluc3RydWN0aW9uKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0KCk7Ci0gICAgaW50
IHZhbHVlID0gYnl0ZWNvZGUudmFsdWUoKTsKLSAgICBpbnQgcHJvdG8gPSBieXRlY29kZS5wcm90
b3R5cGUoKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElu
c3RhbmNlb2Y+KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKKyAgICBp
bnQgdmFsdWUgPSBieXRlY29kZS52YWx1ZS5vZmZzZXQoKTsKKyAgICBpbnQgcHJvdG8gPSBieXRl
Y29kZS5wcm90b3R5cGUub2Zmc2V0KCk7CiAKICAgICAvLyBMb2FkIHRoZSBvcGVyYW5kcyBpbnRv
IHJlZ2lzdGVycy4KICAgICAvLyBXZSB1c2UgcmVnVDAgZm9yIGJhc2VWYWwgc2luY2Ugd2Ugd2ls
bCBiZSBkb25lIHdpdGggdGhpcyBmaXJzdCwgYW5kIHdlIGNhbiB0aGVuIHVzZSBpdCBmb3IgdGhl
IHJlc3VsdC4KQEAgLTE2NCwyMCArMTcxLDIwIEBAIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNl
b2YoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBlbWl0U3RvcmVCb29sKGRz
dCwgcmVnVDApOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3RvbShJbnN0
cnVjdGlvbiopCit2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0
cnVjdGlvbiopCiB7CiAgICAgLy8gVGhpcyBhbHdheXMgZ29lcyB0byBzbG93IHBhdGggc2luY2Ug
d2UgZXhwZWN0IGl0IHRvIGJlIHJhcmUuCiAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKIH0KIAot
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKICAgICAKLSAgICBhdXRvJiBieXRlY29kZSA9ICpyZWludGVy
cHJldF9jYXN0PE9wSW5zdGFuY2VvZio+KGN1cnJlbnRJbnN0cnVjdGlvbik7Ci0gICAgaW50IGRz
dCA9IGJ5dGVjb2RlLmRzdCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLnZhbHVlKCk7Ci0g
ICAgaW50IHByb3RvID0gYnl0ZWNvZGUucHJvdG90eXBlKCk7CisgICAgYXV0byBieXRlY29kZSA9
IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mPigpOworICAgIGludCBkc3QgPSBi
eXRlY29kZS5kc3Qub2Zmc2V0KCk7CisgICAgaW50IHZhbHVlID0gYnl0ZWNvZGUudmFsdWUub2Zm
c2V0KCk7CisgICAgaW50IHByb3RvID0gYnl0ZWNvZGUucHJvdG90eXBlLm9mZnNldCgpOwogICAg
IAogICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3ImIGdlbiA9IG1faW5zdGFuY2VPZnNbbV9pbnN0
YW5jZU9mSW5kZXgrK107CiAgICAgCkBAIC0xODgsMTUgKzE5NSwxNSBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfaW5zdGFuY2VvZihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0NhcwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2Fs
bCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCiB7CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAotICAgIGF1dG8m
IGJ5dGVjb2RlID0gKnJlaW50ZXJwcmV0X2Nhc3Q8T3BJbnN0YW5jZW9mQ3VzdG9tKj4oY3VycmVu
dEluc3RydWN0aW9uKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0KCk7Ci0gICAgaW50IHZh
bHVlID0gYnl0ZWNvZGUudmFsdWUoKTsKLSAgICBpbnQgY29uc3RydWN0b3IgPSBieXRlY29kZS5j
b25zdHJ1Y3RvcigpOwotICAgIGludCBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUuaGFzSW5z
dGFuY2VWYWx1ZSgpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wSW5zdGFuY2VvZkN1c3RvbT4oKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNl
dCgpOworICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLnZhbHVlLm9mZnNldCgpOworICAgIGludCBj
b25zdHJ1Y3RvciA9IGJ5dGVjb2RlLmNvbnN0cnVjdG9yLm9mZnNldCgpOworICAgIGludCBoYXNJ
bnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUuaGFzSW5zdGFuY2VWYWx1ZS5vZmZzZXQoKTsKIAogICAg
IGVtaXRMb2FkKHZhbHVlLCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRMb2FkUGF5bG9hZChjb25z
dHJ1Y3RvciwgcmVnVDIpOwpAQCAtMjA1LDEwICsyMTIsMTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2luc3RhbmNlb2ZfY3VzdG9tKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjwKICAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQogICAgIAot
dm9pZCBKSVQ6OmVtaXRfb3BfaXNfZW1wdHkoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKK3ZvaWQgSklUOjplbWl0X29wX2lzX2VtcHR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQ7Ci0gICAgaW50IHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsK
KyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzRW1wdHk+KCk7
CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKKyAgICBpbnQgdmFsdWUgPSBi
eXRlY29kZS5vcGVyYW5kLm9mZnNldCgpOwogICAgIAogICAgIGVtaXRMb2FkKHZhbHVlLCByZWdU
MSwgcmVnVDApOwogICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1Zh
bHVlOjpFbXB0eVZhbHVlVGFnKSwgcmVnVDApOwpAQCAtMjE2LDEwICsyMjQsMTEgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfaXNfZW1wdHkoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAg
ICBlbWl0U3RvcmVCb29sKGRzdCwgcmVnVDApOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9pc191
bmRlZmluZWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0
X29wX2lzX3VuZGVmaW5lZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGlu
dCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc1VuZGVmaW5lZD4oKTsKKyAgICBpbnQg
ZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOworICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm9w
ZXJhbmQub2Zmc2V0KCk7CiAgICAgCiAgICAgZW1pdExvYWQodmFsdWUsIHJlZ1QxLCByZWdUMCk7
CiAgICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDEpOwpAQCAtMjQzLDIwICsyNTIs
MjIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkKEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QwKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQor
dm9pZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kOwotICAgIGludCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Cisg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0Jvb2xlYW4+KCk7
CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKKyAgICBpbnQgdmFsdWUgPSBi
eXRlY29kZS5vcGVyYW5kLm9mZnNldCgpOwogICAgIAogICAgIGVtaXRMb2FkVGFnKHZhbHVlLCBy
ZWdUMCk7CiAgICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6
OkJvb2xlYW5UYWcpLCByZWdUMCk7CiAgICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QwKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRfb3BfaXNfbnVtYmVyKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZDsKLSAgICBpbnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVy
YW5kOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNOdW1i
ZXI+KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKKyAgICBpbnQgdmFs
dWUgPSBieXRlY29kZS5vcGVyYW5kLm9mZnNldCgpOwogICAgIAogICAgIGVtaXRMb2FkVGFnKHZh
bHVlLCByZWdUMCk7CiAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CkBAIC0yNjQs
MTEgKzI3NSwxMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKICAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmVnVDApOwogfQogCi12
b2lkIEpJVDo6ZW1pdF9vcF9pc19jZWxsX3dpdGhfdHlwZShJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfaXNfY2VsbF93aXRoX3R5cGUoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBpbnQgZHN0ID0gY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kOwotICAgIGludCB0eXBlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUu
b3BlcmFuZDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElz
Q2VsbFdpdGhUeXBlPigpOworICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7Cisg
ICAgaW50IHZhbHVlID0gYnl0ZWNvZGUub3BlcmFuZC5vZmZzZXQoKTsKKyAgICBpbnQgdHlwZSA9
IGJ5dGVjb2RlLnR5cGU7CiAKICAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKICAg
ICBKdW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMSk7CkBAIC0yODMsMTAgKzI5
NSwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19jZWxsX3dpdGhfdHlwZShJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZWdUMCk7CiB9CiAK
LXZvaWQgSklUOjplbWl0X29wX2lzX29iamVjdChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQ7Ci0gICAgaW50IHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzT2JqZWN0
PigpOworICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7CisgICAgaW50IHZhbHVl
ID0gYnl0ZWNvZGUub3BlcmFuZC5vZmZzZXQoKTsKIAogICAgIGVtaXRMb2FkKHZhbHVlLCByZWdU
MSwgcmVnVDApOwogICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKTsK
QEAgLTMwMSwxMCArMzE0LDExIEBAIHZvaWQgSklUOjplbWl0X29wX2lzX29iamVjdChJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZWdUMCk7
CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZShJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHNyYyA9IGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQ7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BUb1ByaW1pdGl2ZT4oKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwor
ICAgIGludCBzcmMgPSBieXRlY29kZS5zcmMub2Zmc2V0KCk7CiAKICAgICBlbWl0TG9hZChzcmMs
IHJlZ1QxLCByZWdUMCk7CiAKQEAgLTMxNiwxOSArMzMwLDIxIEBAIHZvaWQgSklUOjplbWl0X29w
X3RvX3ByaW1pdGl2ZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgICAgICBl
bWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9zZXRf
ZnVuY3Rpb25fbmFtZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6
OmVtaXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKLSAgICBpbnQgZnVuYyA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQ7Ci0gICAgaW50IG5hbWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0RnVuY3Rpb25OYW1l
PigpOworICAgIGludCBmdW5jID0gYnl0ZWNvZGUuZnVuY3Rpb24ub2Zmc2V0KCk7CisgICAgaW50
IG5hbWUgPSBieXRlY29kZS5uYW1lLm9mZnNldCgpOwogICAgIGVtaXRMb2FkUGF5bG9hZChmdW5j
LCByZWdUMSk7CiAgICAgZW1pdExvYWQobmFtZSwgcmVnVDMsIHJlZ1QyKTsKICAgICBjYWxsT3Bl
cmF0aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgcmVnVDEsIEpTVmFsdWVSZWdzKHJlZ1Qz
LCByZWdUMikpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9ub3QoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX25vdChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kOwotICAgIGludCBzcmMgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVy
YW5kOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTm90Pigp
OworICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7CisgICAgaW50IHNyYyA9IGJ5
dGVjb2RlLm9wZXJhbmQub2Zmc2V0KCk7CiAKICAgICBlbWl0TG9hZFRhZyhzcmMsIHJlZ1QwKTsK
IApAQCAtMzM5LDEwICszNTUsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QwLCAoZHN0
ID09IHNyYykpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX2pmYWxzZShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGludCBjb25kID0gY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wSmZhbHNlPigpOworICAgIGludCBjb25kID0gYnl0ZWNvZGUuY29uZGl0aW9uLm9m
ZnNldCgpOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0
aW9uLCBieXRlY29kZS50YXJnZXQpOwogCiAgICAgZW1pdExvYWQoY29uZCwgcmVnVDEsIHJlZ1Qw
KTsKIApAQCAtMzUzLDEwICszNzAsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNlKEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSgq
dm0oKSwgdmFsdWUsIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxk
Q2hlY2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkp
LCB0YXJnZXQpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBpbnQgY29uZCA9IGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0
aW9uWzJdLnUub3BlcmFuZDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEp0cnVlPigpOworICAgIGludCBjb25kID0gYnl0ZWNvZGUuY29uZGl0aW9uLm9mZnNl
dCgpOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9u
LCBieXRlY29kZS50YXJnZXQpOwogCiAgICAgZW1pdExvYWQoY29uZCwgcmVnVDEsIHJlZ1QwKTsK
ICAgICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7CkBAIC0z
NjYsMTAgKzM4NCwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkoKnZtKCksIHZhbHVl
LCBzY3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVl
cmFkZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX2plcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaW50IHNyYyA9IGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEplcU51bGw+KCk7CisgICAgaW50IHNyYyA9IGJ5dGVjb2RlLnZhbHVlLm9mZnNldCgpOworICAg
IHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29k
ZS50YXJnZXQpOwogCiAgICAgZW1pdExvYWQoc3JjLCByZWdUMSwgcmVnVDApOwogCkBAIC0zOTEs
MTAgKzQxMCwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduLmxp
bmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2puZXFfbnVsbChJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaW50IHNyYyA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudElu
c3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcEpuZXFOdWxsPigpOworICAgIGludCBzcmMgPSBieXRlY29kZS52YWx1ZS5v
ZmZzZXQoKTsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvbiwgYnl0ZWNvZGUudGFyZ2V0KTsKIAogICAgIGVtaXRMb2FkKHNyYywgcmVnVDEsIHJlZ1Qw
KTsKIApAQCAtNDE2LDI2ICs0MzYsMzAgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgd2FzTm90SW1tZWRpYXRlLmxpbmso
dGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2puZXFfcHRyKEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGludCBzcmMgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIFNwZWNpYWw6OlBvaW50ZXIgcHRyID0gY3VycmVudElu
c3RydWN0aW9uWzJdLnUuc3BlY2lhbFBvaW50ZXI7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0gY3Vy
cmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEpuZXFQdHI+KCk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgaW50IHNyYyA9IGJ5dGVjb2RlLnZhbHVl
Lm9mZnNldCgpOworICAgIFNwZWNpYWw6OlBvaW50ZXIgcHRyID0gYnl0ZWNvZGUuc3BlY2lhbFBv
aW50ZXI7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLnRhcmdldCk7CiAKICAgICBlbWl0TG9hZChzcmMsIHJlZ1QxLCByZWdUMCk7
CiAgICAgSnVtcCBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKTsKICAgICBKdW1wIGVx
dWFsID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihhY3R1YWxQb2ludGVy
Rm9yKG1fY29kZUJsb2NrLCBwdHIpKSk7CiAgICAgbm90Q2VsbC5saW5rKHRoaXMpOwotICAgIHN0
b3JlMzIoVHJ1c3RlZEltbTMyKDEpLCAmY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZCk7
CisgICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLmhhc0p1bXBlZCk7CiAgICAg
YWRkSnVtcChqdW1wKCksIHRhcmdldCk7CiAgICAgZXF1YWwubGluayh0aGlzKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRfb3BfZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQg
SklUOjplbWl0X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50
IHNyYzEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGludCBzcmMyID0g
Y3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEVxPigpOworCisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRz
dC5vZmZzZXQoKTsKKyAgICBpbnQgc3JjMSA9IGJ5dGVjb2RlLmxocy5vZmZzZXQoKTsKKyAgICBp
bnQgc3JjMiA9IGJ5dGVjb2RlLnJocy5vZmZzZXQoKTsKIAogICAgIGVtaXRMb2FkMihzcmMxLCBy
ZWdUMSwgcmVnVDAsIHNyYzIsIHJlZ1QzLCByZWdUMik7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNo
MzIoTm90RXF1YWwsIHJlZ1QxLCByZWdUMykpOwpAQCAtNDQ3LDkgKzQ3MSwxMCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9lcShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGVtaXRT
dG9yZUJvb2woZHN0LCByZWdUMCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9lcShJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
CiB7Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKKyAgICBpbnQg
ZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwogCiAgICAgSnVtcExpc3Qgc3RvcmVSZXN1bHQ7
CiAgICAgSnVtcExpc3QgZ2VuZXJpY0Nhc2U7CkBAIC00NzMsMTEgKzQ5OCwxMiBAQCB2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OgogICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZXR1cm5WYWx1ZUdQUik7
CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2plcShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7Ci0gICAgaW50IHRhcmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9w
ZXJhbmQ7Ci0gICAgaW50IHNyYzEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwot
ICAgIGludCBzcmMyID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKKyAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUudGFyZ2V0
KTsKKyAgICBpbnQgc3JjMSA9IGJ5dGVjb2RlLmxocy5vZmZzZXQoKTsKKyAgICBpbnQgc3JjMiA9
IGJ5dGVjb2RlLnJocy5vZmZzZXQoKTsKIAogICAgIGVtaXRMb2FkMihzcmMxLCByZWdUMSwgcmVn
VDAsIHNyYzIsIHJlZ1QzLCByZWdUMik7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1
YWwsIHJlZ1QxLCByZWdUMykpOwpAQCAtNTEyLDE2ICs1MzgsMTkgQEAgdm9pZCBKSVQ6OmNvbXBp
bGVPcEVxSnVtcFNsb3coVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgQ29t
cGlsZU9wRXEKICAgICBkb25lLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19v
cF9qZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qZXEoY29uc3QgSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKIHsKLSAgICBjb21waWxlT3BFcUp1bXBTbG93KGl0ZXIsIENvbXBpbGVPcEVx
VHlwZTo6RXEsIGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOworICAgIHVuc2lnbmVkIHRh
cmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS50YXJnZXQpOwor
ICAgIGNvbXBpbGVPcEVxSnVtcFNsb3coaXRlciwgQ29tcGlsZU9wRXFUeXBlOjpFcSwgdGFyZ2V0
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfbmVxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKIHsKLSAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZDsKLSAgICBpbnQgc3JjMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0g
ICAgaW50IHNyYzIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOworICAgIGludCBkc3Qg
PSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7CisgICAgaW50IHNyYzEgPSBieXRlY29kZS5saHMub2Zm
c2V0KCk7CisgICAgaW50IHNyYzIgPSBieXRlY29kZS5yaHMub2Zmc2V0KCk7CiAKICAgICBlbWl0
TG9hZDIoc3JjMSwgcmVnVDEsIHJlZ1QwLCBzcmMyLCByZWdUMywgcmVnVDIpOwogICAgIGFkZFNs
b3dDYXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDMpKTsKQEAgLTUzMyw5ICs1NjIs
MTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmVxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiAgICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QwKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX25lcShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
TmVxPigpOworICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7CiAKICAgICBKdW1w
TGlzdCBzdG9yZVJlc3VsdDsKICAgICBKdW1wTGlzdCBnZW5lcmljQ2FzZTsKQEAgLTU2MCwxMSAr
NTkwLDEyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+CiAgICAgZW1pdFN0b3JlQm9vbChkc3Qs
IHJldHVyblZhbHVlR1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcShJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3Bfam5lcShjb25zdCBJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGludCB0YXJnZXQgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgIGludCBzcmMxID0gY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgc3JjMiA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQ7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BK
bmVxPigpOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0
aW9uLCBieXRlY29kZS50YXJnZXQpOworICAgIGludCBzcmMxID0gYnl0ZWNvZGUubGhzLm9mZnNl
dCgpOworICAgIGludCBzcmMyID0gYnl0ZWNvZGUucmhzLm9mZnNldCgpOwogCiAgICAgZW1pdExv
YWQyKHNyYzEsIHJlZ1QxLCByZWdUMCwgc3JjMiwgcmVnVDMsIHJlZ1QyKTsKICAgICBhZGRTbG93
Q2FzZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIHJlZ1QzKSk7CkBAIC01NzQsMTYgKzYwNSwy
MCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiAgICAgYWRkSnVtcChicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QyKSwgdGFyZ2V0
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQg
SklUOjplbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgY29tcGls
ZU9wRXFKdW1wU2xvdyhpdGVyLCBDb21waWxlT3BFcVR5cGU6Ok5FcSwgY3VycmVudEluc3RydWN0
aW9uWzNdLnUub3BlcmFuZCk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BKbmVxPigpOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVu
dEluc3RydWN0aW9uLCBieXRlY29kZS50YXJnZXQpOworICAgIGNvbXBpbGVPcEVxSnVtcFNsb3co
aXRlciwgQ29tcGlsZU9wRXFUeXBlOjpORXEsIHRhcmdldCk7CiB9CiAKLXZvaWQgSklUOjpjb21w
aWxlT3BTdHJpY3RFcShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBDb21waWxlT3BT
dHJpY3RFcVR5cGUgdHlwZSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjpjb21w
aWxlT3BTdHJpY3RFcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBDb21w
aWxlT3BTdHJpY3RFcVR5cGUgdHlwZSkKIHsKLSAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgc3JjMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQ7Ci0gICAgaW50IHNyYzIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5k
OworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOworICAg
IGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7CisgICAgaW50IHNyYzEgPSBieXRlY29k
ZS5saHMub2Zmc2V0KCk7CisgICAgaW50IHNyYzIgPSBieXRlY29kZS5yaHMub2Zmc2V0KCk7CiAK
ICAgICBlbWl0TG9hZDIoc3JjMSwgcmVnVDEsIHJlZ1QwLCBzcmMyLCByZWdUMywgcmVnVDIpOwog
CkBAIC02MDcsMjEgKzY0MiwyMyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXEoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29tcGlsZU9wU3RyaWN0RXFUeQogICAgIGVtaXRT
dG9yZUJvb2woZHN0LCByZWdUMCk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX3N0cmljdGVxKElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9zdHJpY3Rl
cShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGNvbXBpbGVP
cFN0cmljdEVxKGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJp
Y3RFcSk7CisgICAgY29tcGlsZU9wU3RyaWN0RXE8T3BTdHJpY3RlcT4oY3VycmVudEluc3RydWN0
aW9uLCBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRfb3BfbnN0cmljdGVxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJ
VDo6ZW1pdF9vcF9uc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKLSAgICBjb21waWxlT3BTdHJpY3RFcShjdXJyZW50SW5zdHJ1Y3Rpb24sIENvbXBpbGVP
cFN0cmljdEVxVHlwZTo6TlN0cmljdEVxKTsKKyAgICBjb21waWxlT3BTdHJpY3RFcTxPcE5zdHJp
Y3RlcT4oY3VycmVudEluc3RydWN0aW9uLCBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RF
cSk7CiB9CiAKLXZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RFcUp1bXAoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlIHR5cGUpCit0ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RFcUp1bXAoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlIHR5cGUpCiB7
Ci0gICAgaW50IHRhcmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAg
aW50IHNyYzEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBzcmMy
ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKKyAgICBpbnQgdGFyZ2V0ID0ganVtcFRhcmdl
dChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLnRhcmdldCk7CisgICAgaW50IHNyYzEgPSBi
eXRlY29kZS5saHMub2Zmc2V0KCk7CisgICAgaW50IHNyYzIgPSBieXRlY29kZS5yaHMub2Zmc2V0
KCk7CiAKICAgICBlbWl0TG9hZDIoc3JjMSwgcmVnVDEsIHJlZ1QwLCBzcmMyLCByZWdUMywgcmVn
VDIpOwogCkBAIC02NDMsMzggKzY4MCw0MSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXFK
dW1wKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIENvbXBpbGVPcFN0cmljdAogICAg
ICAgICBhZGRKdW1wKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDIpLCB0YXJnZXQpOwog
fQogCi12b2lkIEpJVDo6ZW1pdF9vcF9qc3RyaWN0ZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewotICAgIGNvbXBpbGVPcFN0cmljdEVxSnVtcChjdXJyZW50
SW5zdHJ1Y3Rpb24sIENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpOworICAgIGNvbXBp
bGVPcFN0cmljdEVxSnVtcDxPcEpzdHJpY3RlcT4oY3VycmVudEluc3RydWN0aW9uLCBDb21waWxl
T3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3Bfam5zdHJp
Y3RlcShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3Bf
am5zdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAg
IGNvbXBpbGVPcFN0cmljdEVxSnVtcChjdXJyZW50SW5zdHJ1Y3Rpb24sIENvbXBpbGVPcFN0cmlj
dEVxVHlwZTo6TlN0cmljdEVxKTsKKyAgICBjb21waWxlT3BTdHJpY3RFcUp1bXA8T3BKbnN0cmlj
dGVxPihjdXJyZW50SW5zdHJ1Y3Rpb24sIENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVx
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewog
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wSnN0cmljdGVxPigpOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1
bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS50YXJnZXQpOwogICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVn
VDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChi
cmFuY2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVt
aXRTbG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBsaW5rQWxs
U2xvd0Nhc2VzKGl0ZXIpOwogCi0gICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0
aW9uWzNdLnUub3BlcmFuZDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEpuc3RyaWN0ZXE+KCk7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLnRhcmdldCk7CiAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25Db21wYXJlU3RyaWN0RXEsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFs
dWVSZWdzKHJlZ1QzLCByZWdUMikpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3Qz
MihaZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29w
X2VxX251bGwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0
X29wX2VxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAg
ICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgc3Jj
ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBhdXRvIGJ5dGVjb2RlID0g
Y3VycmVudEluc3RydWN0aW9uLT5hczxPcEVxTnVsbD4oKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNv
ZGUuZHN0Lm9mZnNldCgpOworICAgIGludCBzcmMgPSBieXRlY29kZS5vcGVyYW5kLm9mZnNldCgp
OwogCiAgICAgZW1pdExvYWQoc3JjLCByZWdUMSwgcmVnVDApOwogICAgIEp1bXAgaXNJbW1lZGlh
dGUgPSBicmFuY2hJZk5vdENlbGwocmVnVDEpOwpAQCAtNzAyLDEwICs3NDIsMTEgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfZXFfbnVsbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAg
IGVtaXRTdG9yZUJvb2woZHN0LCByZWdUMSk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX25lcV9u
dWxsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9u
ZXFfbnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGlu
dCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBzcmMgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxTnVsbD4oKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUu
ZHN0Lm9mZnNldCgpOworICAgIGludCBzcmMgPSBieXRlY29kZS5vcGVyYW5kLm9mZnNldCgpOwog
CiAgICAgZW1pdExvYWQoc3JjLCByZWdUMSwgcmVnVDApOwogICAgIEp1bXAgaXNJbW1lZGlhdGUg
PSBicmFuY2hJZk5vdENlbGwocmVnVDEpOwpAQCAtNzMzLDE5ICs3NzQsMjEgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfbmVxX251bGwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBl
bWl0U3RvcmVCb29sKGRzdCwgcmVnVDEpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3co
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRocm93PigpOwogICAgIEFTU0VSVChyZWdU
MCA9PSByZXR1cm5WYWx1ZUdQUik7CiAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2Fs
bGVlU2F2ZXNCdWZmZXIodm0oKS0+dG9wRW50cnlGcmFtZSk7Ci0gICAgZW1pdExvYWQoY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgcmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZChi
eXRlY29kZS52YWx1ZS5vZmZzZXQoKSwgcmVnVDEsIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9u
Tm9FeGNlcHRpb25DaGVjayhvcGVyYXRpb25UaHJvdywgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1Qw
KSk7CiAgICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcigqdm0oKSk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0X29wX3RvX251bWJlcihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBK
SVQ6OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0g
ICAgaW50IHNyYyA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKTsKKyAgICBpbnQg
ZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOworICAgIGludCBzcmMgPSBieXRlY29kZS5vcGVy
YW5kLm9mZnNldCgpOwogCiAgICAgZW1pdExvYWQoc3JjLCByZWdUMSwgcmVnVDApOwogCkBAIC03
NTMsMTUgKzc5NiwxNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1iZXIoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihBYm92ZU9yRXF1
YWwsIHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOwogICAgIGlzSW50
MzIubGluayh0aGlzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKKyAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7CiAgICAg
aWYgKHNyYyAhPSBkc3QpCiAgICAgICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7CiB9
CiAKLXZvaWQgSklUOjplbWl0X29wX3RvX3N0cmluZyhJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfdG9fc3RyaW5nKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQ7Ci0gICAgaW50IHNyYyA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJh
bmQ7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1N0cmlu
Zz4oKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOworICAgIGludCBzcmMg
PSBieXRlY29kZS5vcGVyYW5kLm9mZnNldCgpOwogCiAgICAgZW1pdExvYWQoc3JjLCByZWdUMSwg
cmVnVDApOwogCkBAIC03NzIsMjMgKzgxNiwyNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19zdHJp
bmcoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICAgICAgZW1pdFN0b3JlKGRz
dCwgcmVnVDEsIHJlZ1QwKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0KEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF90b19vYmplY3Qo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBpbnQgZHN0ID0g
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgc3JjID0gY3VycmVudElu
c3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcFRvT2JqZWN0PigpOworICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zm
c2V0KCk7CisgICAgaW50IHNyYyA9IGJ5dGVjb2RlLm9wZXJhbmQub2Zmc2V0KCk7CiAKICAgICBl
bWl0TG9hZChzcmMsIHJlZ1QxLCByZWdUMCk7CiAKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5v
dENlbGwocmVnVDEpKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChyZWdUMCkp
OwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOworICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKICAgICBpZiAoc3JjICE9IGRz
dCkKICAgICAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRfb3BfY2F0Y2goSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklU
OjplbWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDYXRjaD4oKTsK
KwogICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIo
dm0oKS0+dG9wRW50cnlGcmFtZSk7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV92bSksIHJl
Z1QzKTsKQEAgLTgxMSwxMyArODU4LDEzIEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAKICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMigw
KSwgQWRkcmVzcyhyZWdUMywgVk06OmV4Y2VwdGlvbk9mZnNldCgpKSk7CiAKLSAgICB1bnNpZ25l
ZCBleGNlcHRpb24gPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIHVuc2ln
bmVkIGV4Y2VwdGlvbiA9IGJ5dGVjb2RlLmV4Y2VwdGlvbi5vZmZzZXQoKTsKICAgICBlbWl0U3Rv
cmUoZXhjZXB0aW9uLCByZWdUMSwgcmVnVDIpOwogCiAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDIs
IEV4Y2VwdGlvbjo6dmFsdWVPZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFz
Qml0cy5wYXlsb2FkKSksIHJlZ1QwKTsKICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMiwgRXhjZXB0
aW9uOjp2YWx1ZU9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRh
ZykpLCByZWdUMSk7CiAKLSAgICB1bnNpZ25lZCB0aHJvd25WYWx1ZSA9IGN1cnJlbnRJbnN0cnVj
dGlvblsyXS51Lm9wZXJhbmQ7CisgICAgdW5zaWduZWQgdGhyb3duVmFsdWUgPSBieXRlY29kZS50
aHJvd25WYWx1ZS5vZmZzZXQoKTsKICAgICBlbWl0U3RvcmUodGhyb3duVmFsdWUsIHJlZ1QxLCBy
ZWdUMCk7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKQEAgLTgyNSw3ICs4NzIsOCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9jYXRjaChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIC8v
IGFyZ3VtZW50IHR5cGUgcHJvb2ZzLCBzdG9yaW5nIGxvY2FscyB0byB0aGUgYnVmZmVyLCBldGMK
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTk4CiAK
LSAgICBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyKiBidWZmZXIgPSBzdGF0aWNfY2FzdDxW
YWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyKj4oY3VycmVudEluc3RydWN0aW9uWzNdLnUucG9p
bnRlcik7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9j
ayk7CisgICAgVmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlciogYnVmZmVyID0gbWV0YWRhdGEu
YnVmZmVyOwogICAgIGlmIChidWZmZXIgfHwgIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2gsIG1fYnl0ZWNvZGVP
ZmZzZXQpOwogICAgIGVsc2UKQEAgLTg0NCwyNCArODkyLDI2IEBAIHZvaWQgSklUOjplbWl0X29w
X2NhdGNoKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAjZW5kaWYgLy8gRU5BQkxF
KERGR19KSVQpCiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2lkZW50aXR5X3dpdGhfcHJvZmlsZShJ
bnN0cnVjdGlvbiopCit2b2lkIEpJVDo6ZW1pdF9vcF9pZGVudGl0eV93aXRoX3Byb2ZpbGUoY29u
c3QgSW5zdHJ1Y3Rpb24qKQogewogICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcg
aGVyZS4uLgogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcGFyZW50X3Njb3BlKEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcGFyZW50X3Nj
b3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaW50IGN1
cnJlbnRTY29wZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQYXJlbnRTY29wZT4oKTsKKyAg
ICBpbnQgY3VycmVudFNjb3BlID0gYnl0ZWNvZGUuc2NvcGUub2Zmc2V0KCk7CiAgICAgZW1pdExv
YWRQYXlsb2FkKGN1cnJlbnRTY29wZSwgcmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdU
MCwgSlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7Ci0gICAgZW1pdFN0b3JlQ2VsbChj
dXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZWdUMCk7CisgICAgZW1pdFN0b3JlQ2Vs
bChieXRlY29kZS5kc3Qub2Zmc2V0KCksIHJlZ1QwKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3Bf
c3dpdGNoX2ltbShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVt
aXRfb3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ewotICAgIHNpemVfdCB0YWJsZUluZGV4ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZDsKLSAgICB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUu
b3BlcmFuZDsKLSAgICB1bnNpZ25lZCBzY3J1dGluZWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10u
dS5vcGVyYW5kOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
U3dpdGNoSW1tPigpOworICAgIHNpemVfdCB0YWJsZUluZGV4ID0gYnl0ZWNvZGUudGFibGVJbmRl
eDsKKyAgICB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1
Y3Rpb24sIGJ5dGVjb2RlLmRlZmF1bHRPZmZzZXQpOworICAgIHVuc2lnbmVkIHNjcnV0aW5lZSA9
IGJ5dGVjb2RlLnNjcnV0aW5lZS5vZmZzZXQoKTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxl
IGZvciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCiAg
ICAgU2ltcGxlSnVtcFRhYmxlKiBqdW1wVGFibGUgPSAmbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBU
YWJsZSh0YWJsZUluZGV4KTsKQEAgLTg3MywxMSArOTIzLDEyIEBAIHZvaWQgSklUOjplbWl0X29w
X3N3aXRjaF9pbW0oSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBqdW1wKHJl
dHVyblZhbHVlR1BSLCBOb1B0clRhZyk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9j
aGFyKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9z
d2l0Y2hfY2hhcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAg
IHNpemVfdCB0YWJsZUluZGV4ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAg
ICB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZDsKLSAgICB1bnNpZ25lZCBzY3J1dGluZWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVy
YW5kOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3dpdGNo
Q2hhcj4oKTsKKyAgICBzaXplX3QgdGFibGVJbmRleCA9IGJ5dGVjb2RlLnRhYmxlSW5kZXg7Cisg
ICAgdW5zaWduZWQgZGVmYXVsdE9mZnNldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9u
LCBieXRlY29kZS5kZWZhdWx0T2Zmc2V0KTsKKyAgICB1bnNpZ25lZCBzY3J1dGluZWUgPSBieXRl
Y29kZS5zY3J1dGluZWUub2Zmc2V0KCk7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Ig
c3dpdGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgogICAgIFNp
bXBsZUp1bXBUYWJsZSoganVtcFRhYmxlID0gJm1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUo
dGFibGVJbmRleCk7CkBAIC04ODksMTEgKzk0MCwxMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0
Y2hfY2hhcihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGp1bXAocmV0dXJu
VmFsdWVHUFIsIE5vUHRyVGFnKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmlu
ZyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3Bfc3dp
dGNoX3N0cmluZyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAg
IHNpemVfdCB0YWJsZUluZGV4ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAg
ICB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZDsKLSAgICB1bnNpZ25lZCBzY3J1dGluZWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVy
YW5kOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3dpdGNo
U3RyaW5nPigpOworICAgIHNpemVfdCB0YWJsZUluZGV4ID0gYnl0ZWNvZGUudGFibGVJbmRleDsK
KyAgICB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLmRlZmF1bHRPZmZzZXQpOworICAgIHVuc2lnbmVkIHNjcnV0aW5lZSA9IGJ5
dGVjb2RlLnNjcnV0aW5lZS5vZmZzZXQoKTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZv
ciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCiAgICAg
U3RyaW5nSnVtcFRhYmxlKiBqdW1wVGFibGUgPSAmbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1
bXBUYWJsZSh0YWJsZUluZGV4KTsKQEAgLTkwNCw0MSArOTU2LDQ1IEBAIHZvaWQgSklUOjplbWl0
X29wX3N3aXRjaF9zdHJpbmcoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBq
dW1wKHJldHVyblZhbHVlR1BSLCBOb1B0clRhZyk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2Rl
YnVnKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9k
ZWJ1Zyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVidWc+KCk7CiAgICAgbG9hZDMy
KGNvZGVCbG9jaygpLT5kZWJ1Z2dlclJlcXVlc3RzQWRkcmVzcygpLCByZWdUMCk7CiAgICAgSnVt
cCBub0RlYnVnZ2VyUmVxdWVzdHMgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDApOwotICAgIGNh
bGxPcGVyYXRpb24ob3BlcmF0aW9uRGVidWcsIGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQpOworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVidWcsIHN0YXRpY19jYXN0PGludD4o
Ynl0ZWNvZGUuZGVidWdIb29rVHlwZSkpOwogICAgIG5vRGVidWdnZXJSZXF1ZXN0cy5saW5rKHRo
aXMpOwogfQogCiAKLXZvaWQgSklUOjplbWl0X29wX2VudGVyKEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIGVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCk7
CiAgICAgCiAgICAgLy8gRXZlbiB0aG91Z2ggSklUIGNvZGUgZG9lc24ndCB1c2UgdGhlbSwgd2Ug
aW5pdGlhbGl6ZSBvdXIgY29uc3RhbnQKICAgICAvLyByZWdpc3RlcnMgdG8gemFwIHN0YWxlIHBv
aW50ZXJzLCB0byBhdm9pZCB1bm5lY2Vzc2FyaWx5IHByb2xvbmdpbmcKICAgICAvLyBvYmplY3Qg
bGlmZXRpbWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1cmUuCi0gICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBtX2NvZGVCbG9jay0+bnVtVmFycygpOyArK2kpCisgICAgZm9yIChpbnQgaSA9IENvZGVC
bG9jazo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOyBp
IDwgbV9jb2RlQmxvY2stPm51bVZhcnMoKTsgKytpKQogICAgICAgICBlbWl0U3RvcmUodmlydHVh
bFJlZ2lzdGVyRm9yTG9jYWwoaSkub2Zmc2V0KCksIGpzVW5kZWZpbmVkKCkpOwogCiAgICAgSklU
U2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3df
cGF0aF9lbnRlcik7CiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X3Njb3BlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKLSAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFNjb3BlPigpOwor
ICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7CiAgICAgZW1pdEdldEZyb21DYWxs
RnJhbWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCByZWdUMCk7CiAgICAgbG9hZFB0
cihBZGRyZXNzKHJlZ1QwLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksIHJlZ1Qw
KTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmVnVDApOwogfQogCi12b2lkIEpJVDo6ZW1pdF9v
cF9jcmVhdGVfdGhpcyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6
OmVtaXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKLSAgICBpbnQgY2FsbGVlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsK
LSAgICBXcml0ZUJhcnJpZXJCYXNlPEpTQ2VsbD4qIGNhY2hlZEZ1bmN0aW9uID0gJmN1cnJlbnRJ
bnN0cnVjdGlvbls0XS51LmpzQ2VsbDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3Ry
dWN0aW9uLT5hczxPcENyZWF0ZVRoaXM+KCk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgaW50IGNhbGxlZSA9IGJ5dGVjb2RlLmNhbGxl
ZS5vZmZzZXQoKTsKKyAgICBXcml0ZUJhcnJpZXJCYXNlPEpTQ2VsbD4qIGNhY2hlZEZ1bmN0aW9u
ID0gJm1ldGFkYXRhLmNhY2hlZENhbGxlZTsKICAgICBSZWdpc3RlcklEIGNhbGxlZVJlZyA9IHJl
Z1QwOwogICAgIFJlZ2lzdGVySUQgcmFyZURhdGFSZWcgPSByZWdUNDsKICAgICBSZWdpc3RlcklE
IHJlc3VsdFJlZyA9IHJlZ1QwOwpAQCAtOTY3LDEwICsxMDIzLDEwIEBAIHZvaWQgSklUOjplbWl0
X29wX2NyZWF0ZV90aGlzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgbG9h
ZDMyKEFkZHJlc3Moc2NyYXRjaFJlZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RB
bGxvY2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mSW5s
aW5lQ2FwYWNpdHkoKSksIHNjcmF0Y2hSZWcpOwogICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3Rv
cmFnZShyZXN1bHRSZWcsIHNjcmF0Y2hSZWcpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7
Ci0gICAgZW1pdFN0b3JlQ2VsbChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZXN1
bHRSZWcpOworICAgIGVtaXRTdG9yZUNlbGwoYnl0ZWNvZGUuZHN0Lm9mZnNldCgpLCByZXN1bHRS
ZWcpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNvbnN0IEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BUb1RoaXM+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7CkBAIC05ODYsMTcgKzEwNDIsMTkgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfdG9fdGhpcyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGFkZFNs
b3dDYXNlKGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QyKSk7CiB9CiAKLXZvaWQgSklU
OjplbWl0X29wX2NoZWNrX3RkeihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9p
ZCBKSVQ6OmVtaXRfb3BfY2hlY2tfdGR6KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7Ci0gICAgZW1pdExvYWRUYWcoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZCwgcmVnVDApOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
Q2hlY2tUZHo+KCk7CisgICAgZW1pdExvYWRUYWcoYnl0ZWNvZGUudGFyZ2V0Lm9mZnNldCgpLCBy
ZWdUMCk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOwogfQogCi12b2lk
IEpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaW50IGRzdCA9IGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IGJhc2UgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGludCBlbnVtZXJhdG9yID0gY3VycmVudEluc3Ry
dWN0aW9uWzRdLnUub3BlcmFuZDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEhhc1N0cnVjdHVyZVByb3BlcnR5PigpOworICAgIGludCBkc3QgPSBieXRlY29k
ZS5kc3Qub2Zmc2V0KCk7CisgICAgaW50IGJhc2UgPSBieXRlY29kZS5iYXNlLm9mZnNldCgpOwor
ICAgIGludCBlbnVtZXJhdG9yID0gYnl0ZWNvZGUuZW51bWVyYXRvci5vZmZzZXQoKTsKIAogICAg
IGVtaXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMCk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90
SlNDZWxsKGJhc2UpOwpAQCAtMTAxMiw3ICsxMDcwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFz
X3N0cnVjdHVyZV9wcm9wZXJ0eShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogCiB2
b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoQnlWYWxJbmZvKiBieVZh
bEluZm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5
TW9kZSkKIHsKLSAgICBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gJm1fY29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKVtieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXhdOworICAgIGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rp
b25zKCkuYXQoYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4KS5wdHIoKTsKICAgICAKICAgICBQYXRj
aGFibGVKdW1wIGJhZFR5cGU7CiAgICAgCkBAIC0xMDM3LDEyICsxMDk1LDE0IEBAIHZvaWQgSklU
Ojpwcml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShCeVZhbEluZm8qIGJ5VmFsSW5mbywg
UmV0dXJuQWRkcmVzc1B0CiAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKENvZGVMb2Nh
dGlvbkNhbGw8Tm9QdHJUYWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxOb1B0clRhZz4ocmV0dXJu
QWRkcmVzcykpLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkhhc0luZGV4
ZWRQcm9wZXJ0eUdlbmVyaWMpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRf
cHJvcGVydHkoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0
X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7
Ci0gICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGlu
dCBwcm9wZXJ0eSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgQXJyYXlQ
cm9maWxlKiBwcm9maWxlID0gYXJyYXlQcm9maWxlRm9yPE9wSGFzSW5kZXhlZFByb3BlcnR5U2hh
cGU+KGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+KCk7CisgICAgYXV0byYgbWV0YWRhdGEg
PSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2Rl
LmRzdC5vZmZzZXQoKTsKKyAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLmJhc2Uub2Zmc2V0KCk7Cisg
ICAgaW50IHByb3BlcnR5ID0gYnl0ZWNvZGUucHJvcGVydHkub2Zmc2V0KCk7CisgICAgQXJyYXlQ
cm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLmFycmF5UHJvZmlsZTsKICAgICBCeVZhbEluZm8q
IGJ5VmFsSW5mbyA9IG1fY29kZUJsb2NrLT5hZGRCeVZhbEluZm8oKTsKICAgICAKICAgICBlbWl0
TG9hZFBheWxvYWQoYmFzZSwgcmVnVDApOwpAQCAtMTA4MSwxMyArMTE0MSwxNCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRp
b25JbmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZU9mZnNldCwgUGF0Y2hhYmxlSnVtcCgpLCBiYWRU
eXBlLCBtb2RlLCBwcm9maWxlLCBkb25lLCBuZXh0SG90UGF0aCkpOwogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQog
ewogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICBpbnQgZHN0ID0gY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHByb3BlcnR5ID0gY3VycmVudEluc3RydWN0aW9uWzNd
LnUub3BlcmFuZDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEhhc0luZGV4ZWRQcm9wZXJ0eT4oKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNl
dCgpOworICAgIGludCBiYXNlID0gYnl0ZWNvZGUuYmFzZS5vZmZzZXQoKTsKKyAgICBpbnQgcHJv
cGVydHkgPSBieXRlY29kZS5wcm9wZXJ0eS5vZmZzZXQoKTsKICAgICBCeVZhbEluZm8qIGJ5VmFs
SW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5
VmFsSW5mbzsKIAogICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKQEAgLTExMDEsMTIgKzEx
NjIsMTMgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3QKICAgICBtX2J5VmFsSW5zdHJ1Y3Rpb25J
bmRleCsrOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1lKEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3Bu
YW1lKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaW50IGRz
dCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IGJhc2UgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGludCBpbmRleCA9IGN1cnJlbnRJbnN0
cnVjdGlvbls0XS51Lm9wZXJhbmQ7Ci0gICAgaW50IGVudW1lcmF0b3IgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bNV0udS5vcGVyYW5kOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wR2V0RGlyZWN0UG5hbWU+KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5v
ZmZzZXQoKTsKKyAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLmJhc2Uub2Zmc2V0KCk7CisgICAgaW50
IGluZGV4ID0gYnl0ZWNvZGUuaW5kZXgub2Zmc2V0KCk7CisgICAgaW50IGVudW1lcmF0b3IgPSBi
eXRlY29kZS5lbnVtZXJhdG9yLm9mZnNldCgpOwogCiAgICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlz
IGEgY2VsbAogICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMCk7CkBAIC0xMTM3LDE1ICsx
MTk5LDE2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9kaXJlY3RfcG5hbWUoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBsb2FkMzIoQmFzZUluZGV4KHJlZ1QwLCByZWdUMiwg
VGltZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFs
dWUsIHUuYXNCaXRzLnBheWxvYWQpKSwgcmVnVDApOwogICAgIAogICAgIGRvbmUubGluayh0aGlz
KTsKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5n
U2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwogICAgIGVtaXRTdG9yZShkc3Qs
IHJlZ1QxLCByZWdUMCk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3Jfc3RydWN0
dXJlX3BuYW1lKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1p
dF9vcF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kOwotICAgIGludCBlbnVtZXJhdG9yID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZDsKLSAgICBpbnQgaW5kZXggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwor
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvclN0
cnVjdHVyZVBuYW1lPigpOworICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7Cisg
ICAgaW50IGVudW1lcmF0b3IgPSBieXRlY29kZS5lbnVtZXJhdG9yLm9mZnNldCgpOworICAgIGlu
dCBpbmRleCA9IGJ5dGVjb2RlLmluZGV4Lm9mZnNldCgpOwogCiAgICAgZW1pdExvYWRQYXlsb2Fk
KGluZGV4LCByZWdUMCk7CiAgICAgZW1pdExvYWRQYXlsb2FkKGVudW1lcmF0b3IsIHJlZ1QxKTsK
QEAgLTExNjUsMTEgKzEyMjgsMTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1
Y3R1cmVfcG5hbWUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBlbWl0U3Rv
cmUoZHN0LCByZWdUMiwgcmVnVDApOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9y
X2dlbmVyaWNfcG5hbWUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklU
OjplbWl0X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kOwotICAgIGludCBlbnVtZXJhdG9yID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUu
b3BlcmFuZDsKLSAgICBpbnQgaW5kZXggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5k
OworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRv
ckdlbmVyaWNQbmFtZT4oKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwor
ICAgIGludCBlbnVtZXJhdG9yID0gYnl0ZWNvZGUuZW51bWVyYXRvci5vZmZzZXQoKTsKKyAgICBp
bnQgaW5kZXggPSBieXRlY29kZS5pbmRleC5vZmZzZXQoKTsKIAogICAgIGVtaXRMb2FkUGF5bG9h
ZChpbmRleCwgcmVnVDApOwogICAgIGVtaXRMb2FkUGF5bG9hZChlbnVtZXJhdG9yLCByZWdUMSk7
CkBAIC0xMTg5LDEwICsxMjUzLDEyIEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2Vu
ZXJpY19wbmFtZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGVtaXRTdG9y
ZShkc3QsIHJlZ1QyLCByZWdUMCk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlw
ZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfcHJv
ZmlsZV90eXBlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAg
VHlwZUxvY2F0aW9uKiBjYWNoZWRUeXBlTG9jYXRpb24gPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5sb2NhdGlvbjsKLSAgICBpbnQgdmFsdWVUb1Byb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wUHJvZmlsZVR5cGU+KCk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0
YShtX2NvZGVCbG9jayk7CisgICAgVHlwZUxvY2F0aW9uKiBjYWNoZWRUeXBlTG9jYXRpb24gPSBt
ZXRhZGF0YS50eXBlTG9jYXRpb247CisgICAgaW50IHZhbHVlVG9Qcm9maWxlID0gYnl0ZWNvZGUu
dGFyZ2V0Lm9mZnNldCgpOwogCiAgICAgLy8gTG9hZCBwYXlsb2FkIGluIFQwLiBMb2FkIHRhZyBp
biBUMy4KICAgICBlbWl0TG9hZFBheWxvYWQodmFsdWVUb1Byb2ZpbGUsIHJlZ1QwKTsKQEAgLTEy
NTQsMzMgKzEzMjAsMzQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAganVtcFRvRW5kLmxpbmsodGhpcyk7CiB9CiAK
LXZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZShJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlj
a2VuX3Byb2xvZ3VlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAg
ICAgdXBkYXRlVG9wQ2FsbEZyYW1lKCk7CiAgICAgc3RhdGljX2Fzc2VydChub25BcmdHUFIwICE9
IHJlZ1QwICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUgcHJvYmxlbXMgaWYg
dGhpcyBpcyB0cnVlLiIpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wTG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlPigpOwogICAgIEdQUlJlZyBzaGFkb3dQYWNr
ZXRSZWcgPSByZWdUMDsKICAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25BcmdHUFIwOyAvLyBU
aGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIuCiAgICAgR1BSUmVnIHNjcmF0Y2gy
UmVnID0gcmVnVDI7CiAgICAgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCgqdm0oKSwgc2hhZG93
UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOwogCiAgICAgc2NyYXRjaDFSZWcg
PSByZWdUNDsKLSAgICBlbWl0TG9hZFBheWxvYWQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZCwgcmVnVDMpOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5zY29wZS5vZmZzZXQo
KSwgcmVnVDMpOwogICAgIGxvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZVBhY2tldChzaGFkb3dQYWNr
ZXRSZWcsIHNjcmF0Y2gxUmVnLCByZWdUMyk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2xvZ19z
aGFkb3dfY2hpY2tlbl90YWlsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lk
IEpJVDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbChjb25zdCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQogewogICAgIHVwZGF0ZVRvcENhbGxGcmFtZSgpOwogICAgIHN0
YXRpY19hc3NlcnQobm9uQXJnR1BSMCAhPSByZWdUMCAmJiBub25BcmdHUFIwICE9IHJlZ1QyLCAi
d2Ugd2lsbCBoYXZlIHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsKKyAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcExvZ1NoYWRvd0NoaWNrZW5UYWlsPigpOwog
ICAgIEdQUlJlZyBzaGFkb3dQYWNrZXRSZWcgPSByZWdUMDsKICAgICBHUFJSZWcgc2NyYXRjaDFS
ZWcgPSBub25BcmdHUFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIu
CiAgICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7CiAgICAgZW5zdXJlU2hhZG93Q2hpY2tl
blBhY2tldCgqdm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcp
OwotCi0gICAgZW1pdExvYWRQYXlsb2FkKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQs
IHJlZ1QyKTsKLSAgICBlbWl0TG9hZFRhZyhjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
LCByZWdUMSk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLnRoaXNWYWx1ZS5vZmZzZXQo
KSwgcmVnVDIpOworICAgIGVtaXRMb2FkVGFnKGJ5dGVjb2RlLnRoaXNWYWx1ZS5vZmZzZXQoKSwg
cmVnVDEpOwogICAgIEpTVmFsdWVSZWdzIHRoaXNSZWdzKHJlZ1QxLCByZWdUMik7Ci0gICAgZW1p
dExvYWRQYXlsb2FkKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQsIHJlZ1QzKTsKKyAg
ICBlbWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUuc2NvcGUub2Zmc2V0KCksIHJlZ1QzKTsKICAgICBs
b2dTaGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIHRoaXNSZWdzLCByZWdU
MywgbV9jb2RlQmxvY2ssIENhbGxTaXRlSW5kZXgoY3VycmVudEluc3RydWN0aW9uKSk7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3Mz
Ml82NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJf
NjQuY3BwCmluZGV4IDkxMjZmNjk2MDdiYmIwNDUwODVhNjE5MTZjYmQ1NmMyOWJmNGE5NGIuLjQw
YWM0ZjNmYzY2ZTg1YmFmOWYyOWEzZDFhMzYzZWZhODgxZjA5MDUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKKysrIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcApAQCAtNDcs
NTAgKzQ3LDU0IEBACiAKIG5hbWVzcGFjZSBKU0MgewogICAgIAotdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X2dldHRlcl9ieV9pZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewotICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZDsKLSAgICBpbnQgcHJvcGVydHkgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
OwotICAgIGludCBvcHRpb25zID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAg
ICBpbnQgZ2V0dGVyID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZDsKKyAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlckJ5SWQ+KCk7Cisg
ICAgaW50IGJhc2UgPSBieXRlY29kZS5iYXNlLm9mZnNldCgpOworICAgIGludCBwcm9wZXJ0eSA9
IGJ5dGVjb2RlLnByb3BlcnR5OworICAgIGludCBvcHRpb25zID0gYnl0ZWNvZGUuYXR0cmlidXRl
czsKKyAgICBpbnQgZ2V0dGVyID0gYnl0ZWNvZGUuYWNjZXNzb3Iub2Zmc2V0KCk7CiAKICAgICBl
bWl0TG9hZFBheWxvYWQoYmFzZSwgcmVnVDEpOwogICAgIGVtaXRMb2FkUGF5bG9hZChnZXR0ZXIs
IHJlZ1QzKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIHJlZ1Qx
LCBtX2NvZGVCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdU
Myk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBpbnQgYmFzZSA9
IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHByb3BlcnR5ID0gY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICBpbnQgb3B0aW9ucyA9IGN1cnJlbnRJ
bnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHNldHRlciA9IGN1cnJlbnRJbnN0cnVj
dGlvbls0XS51Lm9wZXJhbmQ7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BQdXRTZXR0ZXJCeUlkPigpOworICAgIGludCBiYXNlID0gYnl0ZWNvZGUuYmFzZS5v
ZmZzZXQoKTsKKyAgICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5wcm9wZXJ0eTsKKyAgICBpbnQg
b3B0aW9ucyA9IGJ5dGVjb2RlLmF0dHJpYnV0ZXM7CisgICAgaW50IHNldHRlciA9IGJ5dGVjb2Rl
LmFjY2Vzc29yLm9mZnNldCgpOwogCiAgICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QxKTsK
ICAgICBlbWl0TG9hZFBheWxvYWQoc2V0dGVyLCByZWdUMyk7CiAgICAgY2FsbE9wZXJhdGlvbihv
cGVyYXRpb25QdXRTZXR0ZXJCeUlkLCByZWdUMSwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIocHJv
cGVydHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDMpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9w
dXRfZ2V0dGVyX3NldHRlcl9ieV9pZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQor
dm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHByb3BlcnR5ID0gY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZDsKLSAgICBpbnQgYXR0cmlidXRlID0gY3VycmVudEluc3RydWN0aW9uWzNd
LnUub3BlcmFuZDsKLSAgICBpbnQgZ2V0dGVyID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUub3Bl
cmFuZDsKLSAgICBpbnQgc2V0dGVyID0gY3VycmVudEluc3RydWN0aW9uWzVdLnUub3BlcmFuZDsK
KyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlclNl
dHRlckJ5SWQ+KCk7CisgICAgaW50IGJhc2UgPSBieXRlY29kZS5iYXNlLm9mZnNldCgpOworICAg
IGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLnByb3BlcnR5OworICAgIGludCBhdHRyaWJ1dGVzID0g
Ynl0ZWNvZGUuYXR0cmlidXRlczsKKyAgICBpbnQgZ2V0dGVyID0gYnl0ZWNvZGUuZ2V0dGVyLm9m
ZnNldCgpOworICAgIGludCBzZXR0ZXIgPSBieXRlY29kZS5zZXR0ZXIub2Zmc2V0KCk7CiAKICAg
ICBlbWl0TG9hZFBheWxvYWQoYmFzZSwgcmVnVDEpOwogICAgIGVtaXRMb2FkUGF5bG9hZChnZXR0
ZXIsIHJlZ1QzKTsKICAgICBlbWl0TG9hZFBheWxvYWQoc2V0dGVyLCByZWdUNCk7Ci0gICAgY2Fs
bE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIHJlZ1QxLCBtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihwcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1QzLCByZWdUNCk7Cisg
ICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIHJlZ1QxLCBtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihwcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGVzLCByZWdUMywgcmVn
VDQpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBpbnQgYmFz
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHByb3BlcnR5ID0g
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICBpbnQzMl90IGF0dHJpYnV0ZXMg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgIGludCBnZXR0ZXIgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyQnlWYWw+KCk7CisgICAgaW50IGJhc2UgPSBieXRl
Y29kZS5iYXNlLm9mZnNldCgpOworICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLnByb3BlcnR5
Lm9mZnNldCgpOworICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLmF0dHJpYnV0ZXM7
CisgICAgaW50IGdldHRlciA9IGJ5dGVjb2RlLmFjY2Vzc29yLm9mZnNldCgpOwogCiAgICAgZW1p
dExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QyKTsKICAgICBlbWl0TG9hZChwcm9wZXJ0eSwgcmVnVDEs
IHJlZ1QwKTsKQEAgLTk4LDQzICsxMDIsNDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRl
cl9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCByZWdUMiwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJl
Z1QwKSwgYXR0cmlidXRlcywgcmVnVDMpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0
dGVyX2J5X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVt
aXRfb3BfcHV0X3NldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKLSAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7
Ci0gICAgaW50IHByb3BlcnR5ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAg
ICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwot
ICAgIGludCBnZXR0ZXIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOworICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0U2V0dGVyQnlWYWw+KCk7
CisgICAgaW50IGJhc2UgPSBieXRlY29kZS5iYXNlLm9mZnNldCgpOworICAgIGludCBwcm9wZXJ0
eSA9IGJ5dGVjb2RlLnByb3BlcnR5Lm9mZnNldCgpOworICAgIGludDMyX3QgYXR0cmlidXRlcyA9
IGJ5dGVjb2RlLmF0dHJpYnV0ZXM7CisgICAgaW50IHNldHRlciA9IGJ5dGVjb2RlLmFjY2Vzc29y
Lm9mZnNldCgpOwogCiAgICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QyKTsKICAgICBlbWl0
TG9hZChwcm9wZXJ0eSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBlbWl0TG9hZFBheWxvYWQoZ2V0dGVy
LCByZWdUMyk7CisgICAgZW1pdExvYWRQYXlsb2FkKHNldHRlciwgcmVnVDMpOwogICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIHJlZ1QyLCBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApLCBhdHRyaWJ1dGVzLCByZWdUMyk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2Rl
bF9ieV9pZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRf
b3BfZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0g
ICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IGJh
c2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGludCBwcm9wZXJ0eSA9
IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOworICAgIGludCBkc3QgPSBieXRlY29k
ZS5kc3Qub2Zmc2V0KCk7CisgICAgaW50IGJhc2UgPSBieXRlY29kZS5iYXNlLm9mZnNldCgpOwor
ICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLnByb3BlcnR5OwogICAgIGVtaXRMb2FkKGJhc2Us
IHJlZ1QxLCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeUlkSlNS
ZXN1bHQsIGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgbV9jb2RlQmxvY2stPmlkZW50
aWZpZXIocHJvcGVydHkpLmltcGwoKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92
YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX2Rl
bF9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBp
bnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgYmFzZSA9
IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHByb3BlcnR5ID0gY3Vy
cmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcERlbEJ5VmFsPigpOworICAgIGludCBkc3QgPSBieXRlY29kZS5k
c3Qub2Zmc2V0KCk7CisgICAgaW50IGJhc2UgPSBieXRlY29kZS5iYXNlLm9mZnNldCgpOworICAg
IGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLnByb3BlcnR5Lm9mZnNldCgpOwogICAgIGVtaXRMb2Fk
MihiYXNlLCByZWdUMSwgcmVnVDAsIHByb3BlcnR5LCByZWdUMywgcmVnVDIpOwogICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxKU1Jlc3VsdCwgZHN0LCBKU1ZhbHVlUmVncyhy
ZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2J5X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9p
ZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
OwotICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICBp
bnQgcHJvcGVydHkgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgIEFycmF5
UHJvZmlsZSogcHJvZmlsZSA9IGFycmF5UHJvZmlsZUZvcjxPcEdldEJ5VmFsU2hhcGU+KGN1cnJl
bnRJbnN0cnVjdGlvbik7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BHZXRCeVZhbD4oKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRh
KG1fY29kZUJsb2NrKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOworICAg
IGludCBiYXNlID0gYnl0ZWNvZGUuYmFzZS5vZmZzZXQoKTsKKyAgICBpbnQgcHJvcGVydHkgPSBi
eXRlY29kZS5wcm9wZXJ0eS5vZmZzZXQoKTsKKyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAm
bWV0YWRhdGEuYXJyYXlQcm9maWxlOwogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9jb2Rl
QmxvY2stPmFkZEJ5VmFsSW5mbygpOwogCiAgICAgZW1pdExvYWQyKGJhc2UsIHJlZ1QxLCByZWdU
MCwgcHJvcGVydHksIHJlZ1QzLCByZWdUMik7CkBAIC0xNzcsNyArMTg2LDcgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZ2V0X2J5X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAg
ICAgICByZXN1bHRPSy5saW5rKHRoaXMpOwogICAgIH0KIAotICAgIGVtaXRWYWx1ZVByb2ZpbGlu
Z1NpdGUoKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKSk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKIAogICAgIExh
YmVsIG5leHRIb3RQYXRoID0gbGFiZWwoKTsKQEAgLTE4NSwxNyArMTk0LDE4IEBAIHZvaWQgSklU
OjplbWl0X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAg
ICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZh
bEluZm8sIG1fYnl0ZWNvZGVPZmZzZXQsIG5vdEluZGV4LCBiYWRUeXBlLCBtb2RlLCBwcm9maWxl
LCBkb25lLCBuZXh0SG90UGF0aCkpOwogfQogCi1KSVRHZXRCeUlkR2VuZXJhdG9yIEpJVDo6ZW1p
dEdldEJ5VmFsV2l0aENhY2hlZElkKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEp1bXAm
IGZhc3REb25lQ2FzZSwgSnVtcCYgc2xvd0RvbmVDYXNlLCBKdW1wTGlzdCYgc2xvd0Nhc2VzKQor
SklUR2V0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRHZXRCeVZhbFdpdGhDYWNoZWRJZChCeVZhbElu
Zm8qIGJ5VmFsSW5mbywgT3BHZXRCeVZhbCBieXRlY29kZSwgY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBKdW1wJiBmYXN0RG9uZUNhc2UsIEp1bXAmIHNsb3dEb25lQ2FzZSwgSnVtcExp
c3QmIHNsb3dDYXNlcykKIHsKLSAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZDsKLQogICAgIC8vIGJhc2U6IHRhZyhyZWdUMSksIHBheWxvYWQocmVnVDApCiAgICAg
Ly8gcHJvcGVydHk6IHRhZyhyZWdUMyksIHBheWxvYWQocmVnVDIpCiAgICAgLy8gc2NyYXRjaDog
cmVnVDQKIAorICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7CisKICAgICBzbG93
Q2FzZXMuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChyZWdUMykpOwogICAgIGVtaXRCeVZhbElkZW50
aWZpZXJDaGVjayhieVZhbEluZm8sIHJlZ1QyLCByZWdUNCwgcHJvcGVydHlOYW1lLCBzbG93Q2Fz
ZXMpOwogCisgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29k
ZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXgpLnB0cigp
OwogICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAogICAgICAgICBtX2NvZGVCbG9jaywgQ29k
ZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwgQ2FsbFNpdGVJbmRleChjdXJyZW50SW5zdHJ1Y3Rp
b24pLCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIHBy
b3BlcnR5TmFtZS5pbXBsKCksIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIEpTVmFs
dWVSZWdzKHJlZ1QxLCByZWdUMCksIEFjY2Vzc1R5cGU6OkdldCk7CkBAIC0yMDYsMTggKzIxNiwx
OSBAQCBKSVRHZXRCeUlkR2VuZXJhdG9yIEpJVDo6ZW1pdEdldEJ5VmFsV2l0aENhY2hlZElkKEJ5
VmFsSW5mbyogYnlWYWxJbmZvLCBJbnN0cnVjdAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBs
YWJlbCgpOwogICAgIGdlbi5zbG93UGF0aEp1bXAoKS5saW5rKHRoaXMpOwogCi0gICAgQ2FsbCBj
YWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwg
ZHN0LCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgcHJvcGVydHlO
YW1lLmltcGwoKSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5
dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCBk
c3QsIGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBwcm9wZXJ0eU5h
bWUuaW1wbCgpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNh
bGwpOwogICAgIHNsb3dEb25lQ2FzZSA9IGp1bXAoKTsKIAogICAgIHJldHVybiBnZW47CiB9CiAK
LXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGlu
dCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBiYXNlID0g
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICBpbnQgcHJvcGVydHkgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRz
dC5vZmZzZXQoKTsKKyAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLmJhc2Uub2Zmc2V0KCk7CisgICAg
aW50IHByb3BlcnR5ID0gYnl0ZWNvZGUucHJvcGVydHkub2Zmc2V0KCk7CiAgICAgQnlWYWxJbmZv
KiBieVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbklu
ZGV4XS5ieVZhbEluZm87CiAKICAgICBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyLCBiYXNl
KTsgLy8gYmFzZSBjZWxsIGNoZWNrCkBAIC0yMjksNyArMjQwLDcgQEAgdm9pZCBKSVQ6OmVtaXRT
bG93X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXMKICAgICBlbWl0TmFrZWRDYWxsKENvZGVMb2NhdGlvbkxhYmVsPE5vUHRyVGFnPiht
X3ZtLT5nZXRDVElTdHViKHN0cmluZ0dldEJ5VmFsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9Q
dHJUYWc+KCkpKTsKICAgICBKdW1wIGZhaWxlZCA9IGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDAp
OwogICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3Qo
anVtcCgpLCBPUENPREVfTEVOR1RIKG9wX2dldF9ieV92YWwpKTsKKyAgICBlbWl0SnVtcFNsb3dU
b0hvdChqdW1wKCksIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKTsKICAgICBmYWlsZWQubGlu
ayh0aGlzKTsKICAgICBub3RTdHJpbmcubGluayh0aGlzKTsKICAgICBub25DZWxsLmxpbmsodGhp
cyk7CkBAIC0yNDcsMTQgKzI1OCwyMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3Zh
bChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0NhcwogICAgIG1f
YnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnJldHVybkFkZHJl
c3MgPSBjYWxsOwogICAgIG1fYnlWYWxJbnN0cnVjdGlvbkluZGV4Kys7CiAKLSAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jaykpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFs
X2RpcmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGVt
aXRfb3BfcHV0X2J5X3ZhbDxPcFB1dEJ5VmFsRGlyZWN0PihjdXJyZW50SW5zdHJ1Y3Rpb24pOwog
fQogCi12b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCit0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjplbWl0X29wX3B1dF9i
eV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBpbnQg
YmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHByb3BlcnR5
ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICBBcnJheVByb2ZpbGUqIHBy
b2ZpbGUgPSBhcnJheVByb2ZpbGVGb3I8T3BQdXRCeVZhbFNoYXBlPihjdXJyZW50SW5zdHJ1Y3Rp
b24pOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOwor
ICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAg
IGludCBiYXNlID0gYnl0ZWNvZGUuYmFzZS5vZmZzZXQoKTsKKyAgICBpbnQgcHJvcGVydHkgPSBi
eXRlY29kZS5wcm9wZXJ0eS5vZmZzZXQoKTsKKyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAm
bWV0YWRhdGEuYXJyYXlQcm9maWxlOwogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9jb2Rl
QmxvY2stPmFkZEJ5VmFsSW5mbygpOwogICAgIAogICAgIGVtaXRMb2FkMihiYXNlLCByZWdUMSwg
cmVnVDAsIHByb3BlcnR5LCByZWdUMywgcmVnVDIpOwpAQCAtMjc0LDE2ICsyOTMsMTYgQEAgdm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogICAgIEpJVEFycmF5TW9kZSBtb2RlID0gY2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUpOwogICAg
IHN3aXRjaCAobW9kZSkgewogICAgIGNhc2UgSklUSW50MzI6Ci0gICAgICAgIHNsb3dDYXNlcyA9
IGVtaXRJbnQzMlB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAg
IHNsb3dDYXNlcyA9IGVtaXRJbnQzMlB1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlKTsKICAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBKSVREb3VibGU6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRE
b3VibGVQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBzbG93
Q2FzZXMgPSBlbWl0RG91YmxlUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUpOwogICAgICAgICBi
cmVhazsKICAgICBjYXNlIEpJVENvbnRpZ3VvdXM6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRD
b250aWd1b3VzUHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAg
c2xvd0Nhc2VzID0gZW1pdENvbnRpZ3VvdXNQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSk7CiAg
ICAgICAgIGJyZWFrOwogICAgIGNhc2UgSklUQXJyYXlTdG9yYWdlOgotICAgICAgICBzbG93Q2Fz
ZXMgPSBlbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBl
KTsKKyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKGJ5dGVjb2Rl
LCBiYWRUeXBlKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQ1JBU0go
KTsKQEAgLTI5OCwxMSArMzE3LDEzIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZv
LmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVPZmZzZXQs
IG5vdEluZGV4LCBiYWRUeXBlLCBtb2RlLCBwcm9maWxlLCBkb25lLCBkb25lKSk7CiB9CiAKLUpJ
VDo6SnVtcExpc3QgSklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbChJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBJbmRleGluZ1R5
cGUgaW5kZXhpbmdTaGFwZSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK0pJVDo6SnVtcExpc3Qg
SklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxl
SnVtcCYgYmFkVHlwZSwgSW5kZXhpbmdUeXBlIGluZGV4aW5nU2hhcGUpCiB7Ci0gICAgaW50IGJh
c2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCB2YWx1ZSA9IGN1
cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxl
ID0gYXJyYXlQcm9maWxlRm9yPE9wUHV0QnlWYWxTaGFwZT4oY3VycmVudEluc3RydWN0aW9uKTsK
KyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAg
ICBpbnQgYmFzZSA9IGJ5dGVjb2RlLmJhc2Uub2Zmc2V0KCk7CisgICAgaW50IHZhbHVlID0gYnl0
ZWNvZGUudmFsdWUub2Zmc2V0KCk7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFk
YXRhLmFycmF5UHJvZmlsZTsKIAogICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKICAgICAKQEAgLTM1
NywxMSArMzc4LDEzIEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXNQ
dXRCeVZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uCiAgICAgcmV0dXJuIHNsb3dD
YXNlczsKIH0KIAotSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKQor
dGVtcGxhdGUgPHR5cGVuYW1lIE9wPgorSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRBcnJheVN0b3Jh
Z2VQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKIHsKLSAgICBp
bnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHZhbHVl
ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICBBcnJheVByb2ZpbGUqIHBy
b2ZpbGUgPSBhcnJheVByb2ZpbGVGb3I8T3BQdXRCeVZhbFNoYXBlPihjdXJyZW50SW5zdHJ1Y3Rp
b24pOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2sp
OworICAgIGludCBiYXNlID0gYnl0ZWNvZGUuYmFzZS5vZmZzZXQoKTsKKyAgICBpbnQgdmFsdWUg
PSBieXRlY29kZS52YWx1ZS5vZmZzZXQoKTsKKyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAm
bWV0YWRhdGEuYXJyYXlQcm9maWxlOwogCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIApA
QCAtMzk0LDEzICs0MTcsMTQgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRBcnJheVN0b3JhZ2VQ
dXRCeVZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQYXQKICAgICByZXR1cm4g
c2xvd0Nhc2VzOwogfQogCi1KSVRQdXRCeUlkR2VuZXJhdG9yIEpJVDo6ZW1pdFB1dEJ5VmFsV2l0
aENhY2hlZElkKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBQdXRLaW5kIHB1dEtpbmQsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwg
SnVtcExpc3QmIGRvbmVDYXNlcywgSnVtcExpc3QmIHNsb3dDYXNlcykKK3RlbXBsYXRlIDx0eXBl
bmFtZSBPcD4KK0pJVFB1dEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0UHV0QnlWYWxXaXRoQ2FjaGVk
SWQoQnlWYWxJbmZvKiBieVZhbEluZm8sIE9wIGJ5dGVjb2RlLCBQdXRLaW5kIHB1dEtpbmQsIGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSnVtcExpc3QmIGRvbmVDYXNlcywgSnVtcExp
c3QmIHNsb3dDYXNlcykKIHsKICAgICAvLyBiYXNlOiB0YWcocmVnVDEpLCBwYXlsb2FkKHJlZ1Qw
KQogICAgIC8vIHByb3BlcnR5OiB0YWcocmVnVDMpLCBwYXlsb2FkKHJlZ1QyKQogCi0gICAgaW50
IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCB2YWx1ZSA9
IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgaW50IGJhc2UgPSBieXRlY29k
ZS5iYXNlLm9mZnNldCgpOworICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLnZhbHVlLm9mZnNldCgp
OwogCiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdENlbGwocmVnVDMpKTsKICAgICBl
bWl0QnlWYWxJZGVudGlmaWVyQ2hlY2soYnlWYWxJbmZvLCByZWdUMiwgcmVnVDIsIHByb3BlcnR5
TmFtZSwgc2xvd0Nhc2VzKTsKQEAgLTQxMSw2ICs0MzUsNyBAQCBKSVRQdXRCeUlkR2VuZXJhdG9y
IEpJVDo6ZW1pdFB1dEJ5VmFsV2l0aENhY2hlZElkKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBJbnN0
cnVjdAogICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMCk7CiAgICAgZW1pdExvYWQodmFs
dWUsIHJlZ1QzLCByZWdUMik7CiAKKyAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5VmFsSW5mby0+Ynl0ZWNv
ZGVJbmRleCkucHRyKCk7CiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW4oCiAgICAgICAgIG1f
Y29kZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpLCBDYWxsU2l0ZUluZGV4KGN1
cnJlbnRJbnN0cnVjdGlvbiksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMo
KSwKICAgICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJlZ3Mo
cmVnVDMsIHJlZ1QyKSwgcmVnVDEsIG1fY29kZUJsb2NrLT5lY21hTW9kZSgpLCBwdXRLaW5kKTsK
QEAgLTQzMCwxOCArNDU1LDI5IEBAIEpJVFB1dEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0UHV0QnlW
YWxXaXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiBieVZhbEluZm8sIEluc3RydWN0CiAgICAgcmV0dXJu
IGdlbjsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRl
cikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIp
CiB7Ci0gICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAg
IGludCBwcm9wZXJ0eSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgaW50
IHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBib29sIGlzRGly
ZWN0ID0gY3VycmVudEluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX3B1dF9ieV92YWxfZGly
ZWN0OworICAgIGludCBiYXNlOworICAgIGludCBwcm9wZXJ0eTsKKyAgICBpbnQgdmFsdWU7CisK
KyAgICBhdXRvIGxvYWQgPSBbJl0oYXV0byBieXRlY29kZSkgeworICAgICAgICBiYXNlID0gYnl0
ZWNvZGUuYmFzZS5vZmZzZXQoKTsKKyAgICAgICAgcHJvcGVydHkgPSBieXRlY29kZS5wcm9wZXJ0
eS5vZmZzZXQoKTsKKyAgICAgICAgdmFsdWUgPSBieXRlY29kZS52YWx1ZS5vZmZzZXQoKTsKKyAg
ICB9OworCisgICAgaWYgKGlzRGlyZWN0KQorICAgICAgICBsb2FkKGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BQdXRCeVZhbERpcmVjdD4oKSk7CisgICAgZWxzZQorICAgICAgICBsb2FkKGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSk7CisKICAgICBCeVZhbEluZm8qIGJ5VmFs
SW5mbyA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5
VmFsSW5mbzsKICAgICAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgIExhYmVsIHNs
b3dQYXRoID0gbGFiZWwoKTsKICAgICAKLSAgICBib29sIGlzRGlyZWN0ID0gSW50ZXJwcmV0ZXI6
OmdldE9wY29kZUlEKGN1cnJlbnRJbnN0cnVjdGlvbi0+dS5vcGNvZGUpID09IG9wX3B1dF9ieV92
YWxfZGlyZWN0OwotCiAgICAgLy8gVGhlIHJlZ2lzdGVyIHNlbGVjdGlvbiBiZWxvdyBpcyBjaG9z
ZW4gdG8gcmVkdWNlIHJlZ2lzdGVyIHN3YXBwaW5nIG9uIEFSTS4KICAgICAvLyBTd2FwcGluZyBz
aG91bGRuJ3QgaGFwcGVuIG9uIG90aGVyIHBsYXRmb3Jtcy4KICAgICBlbWl0TG9hZChiYXNlLCBy
ZWdUMiwgcmVnVDEpOwpAQCAtNDU0LDExICs0OTAsMTIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXMKICAgICBtX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleCsrOwogfQogCi12b2lkIEpJVDo6ZW1pdF9v
cF90cnlfZ2V0X2J5X2lkKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJ
VDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7
Ci0gICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihjdXJyZW50
SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOworICAgIGludCBkc3QgPSBieXRlY29kZS5k
c3Qub2Zmc2V0KCk7CisgICAgaW50IGJhc2UgPSBieXRlY29kZS5iYXNlLm9mZnNldCgpOworICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRl
Y29kZS5wcm9wZXJ0eSkpOwogCiAgICAgZW1pdExvYWQoYmFzZSwgcmVnVDEsIHJlZ1QwKTsKICAg
ICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwpAQCAtNDcwLDE2ICs1
MDcsMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAg
ICAgbV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKICAgICAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdT
aXRlKCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jaykpOwogICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7CiB9CiAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGxp
bmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1f
Y29kZUJsb2NrLT5pZGVudGlmaWVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKTsK
KyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+
KCk7CisgICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7CisgICAgY29u
c3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2Rl
LnByb3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRz
W21fZ2V0QnlJZEluZGV4KytdOwogCkBAIC00OTEsMTEgKzUyOSwxMiBAQCB2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfdHJ5X2dldF9ieV9pZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvdwogfQogCiAKLXZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX2dldF9ieV9p
ZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBp
bnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgYmFzZSA9
IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgY29uc3QgSWRlbnRpZmllciog
aWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51
Lm9wZXJhbmQpKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cEdldEJ5SWREaXJlY3Q+KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsK
KyAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLmJhc2Uub2Zmc2V0KCk7CisgICAgY29uc3QgSWRlbnRp
ZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLnByb3BlcnR5
KSk7CiAKICAgICBlbWl0TG9hZChiYXNlLCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7CkBAIC01MDcsMzIgKzU0NiwzNCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5
SWRzLmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOworICAgIGVt
aXRWYWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKICAg
ICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfZ2V0X2J5X2lkX2RpcmVjdChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29w
X2dldF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwogCi0gICAgaW50IHJlc3VsdFZSZWcgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7CisgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOwor
ICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOworICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5wcm9w
ZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dl
dEJ5SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0g
ICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG9wZXJhdGlvbkdldEJ5SWRE
aXJlY3RPcHRpbWl6ZSwgcmVzdWx0VlJlZywgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJl
Z1QxLCByZWdUMCksIGlkZW50LT5pbXBsKCkpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b25XaXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdl
dEJ5SWREaXJlY3RPcHRpbWl6ZSwgcmVzdWx0VlJlZywgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVS
ZWdzKHJlZ1QxLCByZWdUMCksIGlkZW50LT5pbXBsKCkpOwogCiAgICAgZ2VuLnJlcG9ydFNsb3dQ
YXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIAogCi12b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0
X29wX2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewot
ICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBi
YXNlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoY3VycmVudEluc3RydWN0aW9u
WzNdLnUub3BlcmFuZCkpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0QnlJZD4oKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwor
ICAgIGludCBiYXNlID0gYnl0ZWNvZGUuYmFzZS5vZmZzZXQoKTsKKyAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUucHJvcGVydHkp
KTsKICAgICAKICAgICBlbWl0TG9hZChiYXNlLCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRKdW1w
U2xvd0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7CkBAIC01NDcsMzIgKzU4OCwzNCBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMu
YXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7CisgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwogICAgIGVt
aXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9n
ZXRfYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCi0g
ICAgaW50IHJlc3VsdFZSZWcgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAg
IGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihjdXJy
ZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOworICAgIGludCByZXN1bHRWUmVnID0gYnl0
ZWNvZGUuZHN0Lm9mZnNldCgpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2Nv
ZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJ
ZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKICAgICAKICAg
ICBMYWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKICAgICAKLSAgICBDYWxsIGNhbGwgPSBj
YWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHRW
UmVnLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgaWRlbnQtPmlt
cGwoKSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2Rl
Lm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHRW
UmVnLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgaWRlbnQtPmlt
cGwoKSk7CiAgICAgCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBj
YWxsKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dp
dGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGlu
dCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBiYXNlID0g
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICBpbnQgdGhpc1ZSZWcgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVy
YW5kKSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRC
eUlkV2l0aFRoaXM+KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKKyAg
ICBpbnQgYmFzZSA9IGJ5dGVjb2RlLmJhc2Uub2Zmc2V0KCk7CisgICAgaW50IHRoaXNWUmVnID0g
Ynl0ZWNvZGUudGhpc1ZhbHVlLm9mZnNldCgpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50
ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5wcm9wZXJ0eSkpOwogICAgIAog
ICAgIGVtaXRMb2FkKGJhc2UsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdExvYWQodGhpc1ZSZWcs
IHJlZ1Q0LCByZWdUMyk7CkBAIC01ODYsMzUgKzYyOSwzOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9n
ZXRfYnlfaWRfd2l0aF90aGlzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAg
YWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzV2l0aFRoaXMu
YXBwZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7CisgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwogICAgIGVt
aXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9n
ZXRfYnlfaWRfd2l0aF90aGlzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGxpbmtBbGxT
bG93Q2FzZXMoaXRlcik7CiAKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQ7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJs
b2NrLT5pZGVudGlmaWVyKGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQpKTsKKyAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4o
KTsKKyAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKKyAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUu
cHJvcGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciYgZ2VuID0gbV9n
ZXRCeUlkc1dpdGhUaGlzW21fZ2V0QnlJZFdpdGhUaGlzSW5kZXgrK107CiAgICAgCiAgICAgTGFi
ZWwgY29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAgICAgCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbldpdGhQcm9maWxlKG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplLCByZXN1
bHRWUmVnLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1
ZVJlZ3MocmVnVDQsIHJlZ1QzKSwgaWRlbnQtPmltcGwoKSk7CisgICAgQ2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3Bl
cmF0aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIHJlc3VsdFZSZWcsIGdlbi5zdHViSW5mbygp
LCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUNCwgcmVnVDMpLCBp
ZGVudC0+aW1wbCgpKTsKICAgICAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRo
QmVnaW4sIGNhbGwpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChjb25z
dCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIC8vIEluIG9yZGVyIHRv
IGJlIGFibGUgdG8gcGF0Y2ggYm90aCB0aGUgU3RydWN0dXJlLCBhbmQgdGhlIG9iamVjdCBvZmZz
ZXQsIHdlIHN0b3JlIG9uZSBwb2ludGVyLAogICAgIC8vIHRvIGp1c3QgYWZ0ZXIgdGhlIGFyZ3Vt
ZW50cyBoYXZlIGJlZW4gbG9hZGVkIGludG8gcmVnaXN0ZXJzICdob3RQYXRoQmVnaW4nLCBhbmQg
d2UgZ2VuZXJhdGUgY29kZQogICAgIC8vIHN1Y2ggdGhhdCB0aGUgU3RydWN0dXJlICYgb2Zmc2V0
IGFyZSBhbHdheXMgYXQgdGhlIHNhbWUgZGlzdGFuY2UgZnJvbSB0aGlzLgogICAgIAotICAgIGlu
dCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgdmFsdWUg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgIGludCBkaXJlY3QgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bOF0udS5wdXRCeUlkRmxhZ3MgJiBQdXRCeUlkSXNEaXJlY3Q7CisgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOworICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGlu
dCBiYXNlID0gYnl0ZWNvZGUuYmFzZS5vZmZzZXQoKTsKKyAgICBpbnQgdmFsdWUgPSBieXRlY29k
ZS52YWx1ZS5vZmZzZXQoKTsKKyAgICBpbnQgZGlyZWN0ID0gbWV0YWRhdGEuZmxhZ3MgJiBQdXRC
eUlkSXNEaXJlY3Q7CiAgICAgCiAgICAgZW1pdExvYWQyKGJhc2UsIHJlZ1QxLCByZWdUMCwgdmFs
dWUsIHJlZ1QzLCByZWdUMik7CiAgICAgCkBAIC02MzMsMTIgKzY3OSwxMyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBt
X3B1dEJ5SWRzLmFwcGVuZChnZW4pOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5
X2lkKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5
Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAotICAgIGlu
dCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBjb25zdCBJZGVu
dGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoY3VycmVudEluc3RydWN0
aW9uWzJdLnUub3BlcmFuZCkpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rp
b24tPmFzPE9wUHV0QnlJZD4oKTsKKyAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLmJhc2Uub2Zmc2V0
KCk7CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGJ5dGVjb2RlLnByb3BlcnR5KSk7CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luKHRoaXMp
OwogCkBAIC02NTMsMTEgKzcwMCwxMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lk
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZQogICAgIGdl
bi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKLXZvaWQgSklU
OjplbWl0X29wX2luX2J5X2lkKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lk
IEpJVDo6ZW1pdF9vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwot
ICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICBjb25z
dCBJZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoY3VycmVudElu
c3RydWN0aW9uWzNdLnUub3BlcmFuZCkpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSW5CeUlkPigpOworICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zm
c2V0KCk7CisgICAgaW50IGJhc2UgPSBieXRlY29kZS5iYXNlLm9mZnNldCgpOworICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5w
cm9wZXJ0eSkpOwogCiAgICAgZW1pdExvYWQoYmFzZSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0
SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwpAQCAtNjcyLDEyICs3MjAsMTMg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKICAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwogfQogCi12b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfaW5fYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19v
cF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7CiAKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQ7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVu
dGlmaWVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKTsKKyAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKKyAgICBpbnQgcmVzdWx0
VlJlZyA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVu
dCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUucHJvcGVydHkpKTsKIAogICAg
IEpJVEluQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5SWRzW21faW5CeUlkSW5kZXgrK107CiAK
QEAgLTcwNSwxMiArNzU0LDE1IEBAIHZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoaW50IGRz
dCwgaW50IHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1CiAgICAgZW1pdFN0
b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9z
Y29wZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3Bf
cmVzb2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewot
ICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBz
Y29wZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgUmVzb2x2ZVR5cGUg
cmVzb2x2ZVR5cGUgPSBzdGF0aWNfY2FzdDxSZXNvbHZlVHlwZT4oY3VycmVudEluc3RydWN0aW9u
WzRdLnUub3BlcmFuZCk7Ci0gICAgdW5zaWduZWQgZGVwdGggPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
NV0udS5vcGVyYW5kOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wUmVzb2x2ZVNjb3BlPigpOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRh
dGEobV9jb2RlQmxvY2spOworICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7Cisg
ICAgaW50IHNjb3BlID0gYnl0ZWNvZGUuc2NvcGUub2Zmc2V0KCk7CisgICAgUmVzb2x2ZVR5cGUg
cmVzb2x2ZVR5cGUgPSBtZXRhZGF0YS5yZXNvbHZlVHlwZTsKKyAgICB1bnNpZ25lZCBkZXB0aCA9
IG1ldGFkYXRhLmxvY2FsU2NvcGVEZXB0aDsKKwogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJl
c29sdmVUeXBlIHJlc29sdmVUeXBlKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsK
ICAgICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKQEAgLTczMyw3ICs3ODUsNyBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CiAgICAgICAgICAg
ICBtb3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgcmVnVDEpOwotICAgICAgICAg
ICAgbW92ZShUcnVzdGVkSW1tUHRyKGN1cnJlbnRJbnN0cnVjdGlvbls2XS51LmpzQ2VsbC5nZXQo
KSksIHJlZ1QwKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YS5sZXhp
Y2FsRW52aXJvbm1lbnQuZ2V0KCkpLCByZWdUMCk7CiAgICAgICAgICAgICBlbWl0U3RvcmUoZHN0
LCByZWdUMSwgcmVnVDApOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRHluYW1p
YzoKQEAgLTgwOSwxMyArODYxLDE1IEBAIHZvaWQgSklUOjplbWl0R2V0Q2xvc3VyZVZhcihpbnQg
c2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kKQogICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0xl
eGljYWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQgKiBzaXplb2Yo
UmVnaXN0ZXIpICsgUGF5bG9hZE9mZnNldCksIHJlZ1QwKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X2Zyb21fc2NvcGUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQg
SklUOjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQ7Ci0gICAgaW50IHNjb3BlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAg
ICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IEdldFB1dEluZm8oY3VycmVudEluc3RydWN0aW9u
WzRdLnUub3BlcmFuZCkucmVzb2x2ZVR5cGUoKTsKLSAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVT
bG90ID0gY3VycmVudEluc3RydWN0aW9uWzVdLnUuc3RydWN0dXJlLnNsb3QoKTsKLSAgICB1aW50
cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigmY3VycmVu
dEluc3RydWN0aW9uWzZdLnUucG9pbnRlcik7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRz
dC5vZmZzZXQoKTsKKyAgICBpbnQgc2NvcGUgPSBieXRlY29kZS5zY29wZS5vZmZzZXQoKTsKKyAg
ICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLmdldFB1dEluZm8ucmVzb2x2ZVR5
cGUoKTsKKyAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEuc3RydWN0dXJl
LnNsb3QoKTsKKyAgICB1aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1
aW50cHRyX3QqPigmbWV0YWRhdGEub3BlcmFuZCk7CiAgICAgCiAgICAgYXV0byBlbWl0Q29kZSA9
IFsmXSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFu
ZCkgewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CkBAIC05MDIsMTYgKzk1NiwxNyBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwogICAgICAg
ICBicmVhazsKICAgICB9Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOworICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKICAgICBl
bWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X2Zyb21fc2NvcGUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRf
ZnJvbV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7CiAKLSAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsK
LSAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUob3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3Qs
IGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5v
ZmZzZXQoKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgY3VycmVudEluc3RydWN0
aW9uKTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVy
YW5kLCBpbnQgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKQEAgLTk0MiwxNCArOTk3LDE2IEBA
IHZvaWQgSklUOjplbWl0UHV0Q2xvc3VyZVZhcihpbnQgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5k
LCBpbnQgdmFsdWUsIFdhdGNocG9pbnRTCiAgICAgc3RvcmUzMihyZWdUMiwgQWRkcmVzcyhyZWdU
MCwgSlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5kICog
c2l6ZW9mKFJlZ2lzdGVyKSArIFBheWxvYWRPZmZzZXQpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X3RvX3Njb3BlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJ
VDo6ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKLSAgICBpbnQgc2NvcGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
OwotICAgIGludCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAg
R2V0UHV0SW5mbyBnZXRQdXRJbmZvID0gR2V0UHV0SW5mbyhjdXJyZW50SW5zdHJ1Y3Rpb25bNF0u
dS5vcGVyYW5kKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxP
cFB1dFRvU2NvcGU+KCk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7CisgICAgaW50IHNjb3BlID0gYnl0ZWNvZGUuc2NvcGUub2Zmc2V0KCk7Cisg
ICAgaW50IHZhbHVlID0gYnl0ZWNvZGUudmFsdWUub2Zmc2V0KCk7CisgICAgR2V0UHV0SW5mbyBn
ZXRQdXRJbmZvID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSk7CiAgICAgUmVzb2x2ZVR5cGUg
cmVzb2x2ZVR5cGUgPSBnZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7Ci0gICAgU3RydWN0dXJlKiog
c3RydWN0dXJlU2xvdCA9IGN1cnJlbnRJbnN0cnVjdGlvbls1XS51LnN0cnVjdHVyZS5zbG90KCk7
Ci0gICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90
Kj4oJmN1cnJlbnRJbnN0cnVjdGlvbls2XS51LnBvaW50ZXIpOworICAgIFN0cnVjdHVyZSoqIHN0
cnVjdHVyZVNsb3QgPSBtZXRhZGF0YS5zdHJ1Y3R1cmUuc2xvdCgpOworICAgIHVpbnRwdHJfdCog
b3BlcmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5vcGVy
YW5kKTsKICAgICAKICAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZl
VHlwZSwgYm9vbCBpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CiAgICAgICAgIHN3aXRjaCAocmVz
b2x2ZVR5cGUpIHsKQEAgLTk4Myw5ICsxMDQwLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3Rv
X3Njb3BlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgICAgICAgICAgICAg
YWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMSkpOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdFB1
dEdsb2JhbFZhcmlhYmxlSW5kaXJlY3QoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNs
b3QpLCB2YWx1ZSwgYml0d2lzZV9jYXN0PFdhdGNocG9pbnRTZXQqKj4oJmN1cnJlbnRJbnN0cnVj
dGlvbls1XSkpOworICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0
KGJpdHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgdmFsdWUsICZtZXRhZGF0YS53
YXRjaHBvaW50U2V0KTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0UHV0
R2xvYmFsVmFyaWFibGUoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCB2YWx1
ZSwgY3VycmVudEluc3RydWN0aW9uWzVdLnUud2F0Y2hwb2ludFNldCk7CisgICAgICAgICAgICAg
ICAgZW1pdFB1dEdsb2JhbFZhcmlhYmxlKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRT
bG90KSwgdmFsdWUsIG1ldGFkYXRhLndhdGNocG9pbnRTZXQpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBMb2NhbENsb3N1cmVWYXI6CkBAIC05OTMsNyArMTA1
MCw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOgogICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZp
bHRlclZhbHVlKTsKICAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgZW1pdFB1dENsb3N1cmVW
YXIoc2NvcGUsICpvcGVyYW5kU2xvdCwgdmFsdWUsIGN1cnJlbnRJbnN0cnVjdGlvbls1XS51Lndh
dGNocG9pbnRTZXQpOworICAgICAgICAgICAgZW1pdFB1dENsb3N1cmVWYXIoc2NvcGUsICpvcGVy
YW5kU2xvdCwgdmFsdWUsIG1ldGFkYXRhLndhdGNocG9pbnRTZXQpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgogICAgICAgICBjYXNlIER5bmFtaWM6CkBAIC0x
MDQxLDEyICsxMDk4LDEyIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX3B1dF90b19zY29wZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF90b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGxpbmtBbGxTbG93Q2FzZXMo
aXRlcik7CiAKLSAgICBHZXRQdXRJbmZvIGdldFB1dEluZm8gPSBHZXRQdXRJbmZvKGN1cnJlbnRJ
bnN0cnVjdGlvbls0XS51Lm9wZXJhbmQpOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0g
Z2V0UHV0SW5mby5yZXNvbHZlVHlwZSgpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKKyAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlw
ZSA9IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpLnJlc29sdmVUeXBlKCk7CiAgICAgaWYgKHJl
c29sdmVUeXBlID09IE1vZHVsZVZhcikgewogICAgICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1Bh
dGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX3Rocm93X3N0cmljdF9t
b2RlX3JlYWRvbmx5X3Byb3BlcnR5X3dyaXRlX2Vycm9yKTsKICAgICAgICAgc2xvd1BhdGhDYWxs
LmNhbGwoKTsKQEAgLTEwNTQsMjQgKzExMTEsMjYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF90b19zY29wZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0MK
ICAgICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRUb1Njb3BlLCBjdXJyZW50SW5zdHJ1
Y3Rpb24pOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX2Fy
Z3VtZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGlu
dCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBhcmd1bWVu
dHMgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGludCBpbmRleCA9IGN1
cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpOworICAgIGludCBkc3QgPSBi
eXRlY29kZS5kc3Qub2Zmc2V0KCk7CisgICAgaW50IGFyZ3VtZW50cyA9IGJ5dGVjb2RlLmFyZ3Vt
ZW50cy5vZmZzZXQoKTsKKyAgICBpbnQgaW5kZXggPSBieXRlY29kZS5pbmRleDsKICAgICAKICAg
ICBlbWl0TG9hZFBheWxvYWQoYXJndW1lbnRzLCByZWdUMCk7CiAgICAgbG9hZDMyKEFkZHJlc3Mo
cmVnVDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2Yo
V3JpdGVCYXJyaWVyPFVua25vd24+KSArIFRhZ09mZnNldCksIHJlZ1QxKTsKICAgICBsb2FkMzIo
QWRkcmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAq
IHNpemVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICsgUGF5bG9hZE9mZnNldCksIHJlZ1QwKTsK
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwogICAgIGVtaXRTdG9yZShkc3QsIHJl
Z1QxLCByZWdUMCk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX3B1dF90b19hcmd1bWVudHMoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX3B1dF90b19h
cmd1bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBp
bnQgYXJndW1lbnRzID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQg
aW5kZXggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGludCB2YWx1ZSA9
IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb0FyZ3VtZW50cz4oKTsKKyAgICBpbnQgYXJndW1l
bnRzID0gYnl0ZWNvZGUuYXJndW1lbnRzLm9mZnNldCgpOworICAgIGludCBpbmRleCA9IGJ5dGVj
b2RlLmluZGV4OworICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLnZhbHVlLm9mZnNldCgpOwogICAg
IAogICAgIGVtaXRXcml0ZUJhcnJpZXIoYXJndW1lbnRzLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFs
dWUpOwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3Rl
clNldC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmNwcAppbmRl
eCBhM2VlNzQ3MzdkYTczYmRlMmY1YWRhNzJmZmUzZmU5ZjQxODEwNjkzLi41YmFkM2VmMDZmNWZm
NDJlNzQ0NmUxZDdmYTdmODFjYmExNGY1NDdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L1JlZ2lzdGVyU2V0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L1JlZ2lzdGVyU2V0LmNwcApAQCAtMjAxLDYgKzIwMSw4IEBAIFJlZ2lzdGVyU2V0IFJlZ2lzdGVy
U2V0Ojp2bUNhbGxlZVNhdmVSZWdpc3RlcnMoKQogICAgIHJlc3VsdC5zZXQoRlBSSW5mbzo6ZnBS
ZWdDUzUpOwogICAgIHJlc3VsdC5zZXQoRlBSSW5mbzo6ZnBSZWdDUzYpOwogICAgIHJlc3VsdC5z
ZXQoRlBSSW5mbzo6ZnBSZWdDUzcpOworI2VsaWYgQ1BVKEFSTV9USFVNQjIpCisgICAgcmVzdWx0
LnNldChHUFJJbmZvOjpyZWdDUzApOwogI2VuZGlmCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3BwIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5jcHAKaW5kZXggMzU5ZDVlZjhmNjU1
MzEzNDRjYjRlNmQ4YjRkY2Y2ODRiMGM2MWMxYi4uZmE5YTdlZDQyYWFmMWFlMzgzZWE1NWE0M2Ix
YWNmY2E3YjViNjBjNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xM
SW50RGF0YS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5j
cHAKQEAgLTEzNCw3ICsxMzQsNyBAQCB2b2lkIERhdGE6OnBlcmZvcm1Bc3NlcnRpb25zKFZNJiB2
bSkKICNpZiBFTkFCTEUoQ19MT09QKQogICAgIEFTU0VSVChDb2RlQmxvY2s6OmxsaW50QmFzZWxp
bmVDYWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKSA9PSAxKTsKICNlbGlmIFVTRShK
U1ZBTFVFMzJfNjQpCi0gICAgQVNTRVJUKCFDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVT
YXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKSk7CisgICAgQVNTRVJUKENvZGVCbG9jazo6bGxp
bnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpID09IDEpOwogI2Vs
aWYgKENQVShYODZfNjQpICYmICFPUyhXSU5ET1dTKSkgIHx8IENQVShBUk02NCkKICAgICBBU1NF
UlQoQ29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0
ZXJzKCkgPT0gNCk7CiAjZWxpZiAoQ1BVKFg4Nl82NCkgJiYgT1MoV0lORE9XUykpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20g
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KaW5k
ZXggMmY5YWU4OGRlYWQxM2Y3YzdlZGMzZjViYTU4OTBlNDYxNjhmOTFlZS4uNjVkNWU4ZDAzZDQ4
ZWRlZTY2MTJjYTBlNDk4NmM3N2M2NzkyNzdkMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQpAQCAtNTU4LDEwICs1NTgsMTAg
QEAgZW5kCiAjICAgICAgICAgZW5kCiAjICAgICApCiAjCi1pZiBYODZfNjQgb3IgQVJNNjQgb3Ig
QVJNNjRFCitpZiBYODZfNjQgb3IgQVJNNjQgb3IgQVJNNjRFIG9yIEFSTXY3CiAgICAgbWFjcm8g
cHJvYmUoYWN0aW9uKQogICAgICAgICAjIHNhdmUgYWxsIHRoZSByZWdpc3RlcnMgdGhhdCB0aGUg
TExJbnQgbWF5IHVzZS4KLSAgICAgICAgaWYgQVJNNjQgb3IgQVJNNjRFCisgICAgICAgIGlmIEFS
TTY0IG9yIEFSTTY0RSBvciBBUk12NwogICAgICAgICAgICAgcHVzaCBjZnIsIGxyCiAgICAgICAg
IGVuZAogICAgICAgICBwdXNoIGEwLCBhMQpAQCAtNTc1LDYgKzU3NSw4IEBAIGlmIFg4Nl82NCBv
ciBBUk02NCBvciBBUk02NEUKICAgICAgICAgICAgIHB1c2ggY3NyNCwgY3NyNQogICAgICAgICAg
ICAgcHVzaCBjc3I2LCBjc3I3CiAgICAgICAgICAgICBwdXNoIGNzcjgsIGNzcjkKKyAgICAgICAg
ZWxzaWYgQVJNdjcKKyAgICAgICAgICAgIHB1c2ggY3NyMAogICAgICAgICBlbmQKIAogICAgICAg
ICBhY3Rpb24oKQpAQCAtNTg2LDEzICs1ODgsMTUgQEAgaWYgWDg2XzY0IG9yIEFSTTY0IG9yIEFS
TTY0RQogICAgICAgICAgICAgcG9wIGNzcjUsIGNzcjQKICAgICAgICAgICAgIHBvcCBjc3IzLCBj
c3IyCiAgICAgICAgICAgICBwb3AgY3NyMSwgY3NyMAorICAgICAgICBlbHNpZiBBUk12NworICAg
ICAgICAgICAgcG9wIGNzcjAKICAgICAgICAgZW5kCiAgICAgICAgIHBvcCB0NSwgdDQKICAgICAg
ICAgcG9wIHQzLCB0MgogICAgICAgICBwb3AgdDEsIHQwCiAgICAgICAgIHBvcCBhMywgYTIKICAg
ICAgICAgcG9wIGExLCBhMAotICAgICAgICBpZiBBUk02NCBvciBBUk02NEUKKyAgICAgICAgaWYg
QVJNNjQgb3IgQVJNNjRFIG9yIEFSTXY3CiAgICAgICAgICAgICBwb3AgbHIsIGNmcgogICAgICAg
ICBlbmQKICAgICBlbmQKQEAgLTc1OSw3ICs3NjMsNyBAQCBtYWNybyByZXN0b3JlQ2FsbGVlU2F2
ZXNVc2VkQnlMTEludCgpCiBlbmQKIAogbWFjcm8gY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJh
bWVDYWxsZWVTYXZlc0J1ZmZlcih2bSwgdGVtcCkKLSAgICBpZiBBUk02NCBvciBBUk02NEUgb3Ig
WDg2XzY0IG9yIFg4Nl82NF9XSU4KKyAgICBpZiBBUk02NCBvciBBUk02NEUgb3IgWDg2XzY0IG9y
IFg4Nl82NF9XSU4gb3IgQVJNdjcKICAgICAgICAgbG9hZHAgVk06OnRvcEVudHJ5RnJhbWVbdm1d
LCB0ZW1wCiAgICAgICAgIHZtRW50cnlSZWNvcmQodGVtcCwgdGVtcCkKICAgICAgICAgbGVhcCBW
TUVudHJ5UmVjb3JkOjpjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyW3RlbXBdLCB0ZW1wCkBAIC03
OTYsMTIgKzgwMCwxNCBAQCBtYWNybyBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxl
ZVNhdmVzQnVmZmVyKHZtLCB0ZW1wKQogICAgICAgICAgICAgc3RvcmVxIGNzcjQsIDMyW3RlbXBd
CiAgICAgICAgICAgICBzdG9yZXEgY3NyNSwgNDBbdGVtcF0KICAgICAgICAgICAgIHN0b3JlcSBj
c3I2LCA0OFt0ZW1wXQorICAgICAgICBlbHNpZiBBUk12NworICAgICAgICAgICAgc3RvcmVwIGNz
cjAsIFt0ZW1wXQogICAgICAgICBlbmQKICAgICBlbmQKIGVuZAogCiBtYWNybyByZXN0b3JlQ2Fs
bGVlU2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0sIHRlbXApCi0gICAg
aWYgQVJNNjQgb3IgQVJNNjRFIG9yIFg4Nl82NCBvciBYODZfNjRfV0lOCisgICAgaWYgQVJNNjQg
b3IgQVJNNjRFIG9yIFg4Nl82NCBvciBYODZfNjRfV0lOIG9yIEFSTXY3CiAgICAgICAgIGxvYWRw
IFZNOjp0b3BFbnRyeUZyYW1lW3ZtXSwgdGVtcAogICAgICAgICB2bUVudHJ5UmVjb3JkKHRlbXAs
IHRlbXApCiAgICAgICAgIGxlYXAgVk1FbnRyeVJlY29yZDo6Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1
ZmZlclt0ZW1wXSwgdGVtcApAQCAtODM4LDYgKzg0NCw4IEBAIG1hY3JvIHJlc3RvcmVDYWxsZWVT
YXZlc0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSwgdGVtcCkKICAgICAgICAg
ICAgIGxvYWRxIDMyW3RlbXBdLCBjc3I0CiAgICAgICAgICAgICBsb2FkcSA0MFt0ZW1wXSwgY3Ny
NQogICAgICAgICAgICAgbG9hZHEgNDhbdGVtcF0sIGNzcjYKKyAgICAgICAgZWxzaWYgQVJNdjcK
KyAgICAgICAgICAgIGxvYWRwIFt0ZW1wXSwgY3NyMAogICAgICAgICBlbmQKICAgICBlbmQKIGVu
ZApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9m
aWxlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVy
LmNwcAppbmRleCBlMmE3MzkzZWRhODhlMTFhODJlZjc3MzUxNTk3ODAyNWI0NzA3M2Y5Li41NTFm
ZTM0YzRmZGIzNTQzMjFlYjE3OWEwMDRhOWJhZmZjMzg2OTk0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcApAQCAtNDQwLDcgKzQ0
MCw4IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIHRyeUdldEJ5dGVjb2RlSW5kZXgo
dW5zaWduZWQgbGxpbnRQQywgQ29kZUJsb2NrKiBjCiAgICAgcmV0dXJuIDA7CiAjZWxzZQogICAg
IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IGJpdHdpc2VfY2FzdDxJbnN0cnVjdGlvbio+KGxs
aW50UEMpOwotICAgIGlmIChpbnN0cnVjdGlvbiA+PSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygp
LmJlZ2luKCkgJiYgaW5zdHJ1Y3Rpb24gPCBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmVuZCgp
KSB7CisKKyAgICBpZiAoY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5jb250YWlucyhpbnN0cnVj
dGlvbikpIHsKICAgICAgICAgaXNWYWxpZCA9IHRydWU7CiAgICAgICAgIHJldHVybiBjb2RlQmxv
Y2stPmJ5dGVjb2RlT2Zmc2V0KGluc3RydWN0aW9uKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV1RGL3d0Zi9QbGF0Zm9ybS5oIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAppbmRleCBl
MmViNzViY2RiMzNhNzMxMzY0MDJkY2QwMTJkYTA3NjNmZTY4ZDZlLi5iM2YxMjRkYmJiNTk1YWM0
ZTM4ODU3ZGZkZjg3NDMyOTBjZTQxZTBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0
Zm9ybS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKQEAgLTc1NywxMiArNzU3LDE5
IEBACiAjZGVmaW5lIEVOQUJMRV9KSVQgMQogI2VuZGlmCiAKLS8qIERpc2FibGUgSklUIGZvciAz
Mi1iaXQgYnVpbGRzLiAqLwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisjaWYgQ1BVKEFSTV9USFVN
QjIpICYmIE9TKExJTlVYKQorLyogT24gQVJNdjcvTGludXggdGhlIEpJVCBpcyBlbmFibGVkIHVu
bGVzcyBleHBsaWNpdGx5IGRpc2FibGVkLiAqLworI2lmICFkZWZpbmVkKEVOQUJMRV9KSVQpCisj
ZGVmaW5lIEVOQUJMRV9KSVQgMQorI2VuZGlmCisvKiBCdXQgc3RpbGwgZGlzYWJsZSBERkcgZm9y
IG5vdy4gKi8KKyN1bmRlZiBFTkFCTEVfREZHX0pJVAorI2RlZmluZSBFTkFCTEVfREZHX0pJVCAw
CisjZWxzZQorLyogRGlzYWJsZSBKSVQgYW5kIGZvcmNlIENfTE9PUCBvbiBhbGwgMzJiaXQtYXJj
aGl0ZWN0dXJlcyBidXQgQVJNdjctVGh1bWIyL0xpbnV4LiAqLwogI3VuZGVmIEVOQUJMRV9KSVQK
ICNkZWZpbmUgRU5BQkxFX0pJVCAwCi0vKiBGb3JjZSBDX0xPT1Agb24gYWxsIGFyY2hpdGVjdHVy
ZXMgYnV0IEFSTXY3LVRodW1iMi9MaW51eC4gKi8KLSNpZiAhKENQVShBUk1fVEhVTUIyKSAmJiBP
UyhMSU5VWCkpCiAjdW5kZWYgRU5BQkxFX0NfTE9PUAogI2RlZmluZSBFTkFCTEVfQ19MT09QIDEK
ICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Jc29QYWdlSW5saW5l
cy5oIGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Jc29QYWdlSW5saW5lcy5oCmluZGV4IDBjNDc4
NjRjN2I0OWEwZWVjOGEyNjEwY2VmNjdmYTMyOGE0ZWY0YzQuLjEyYjMxODMwYzIyNWQyZjcwZDQ3
MjNhM2QwMWVlNzgzN2E3NzhlNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2Mv
SXNvUGFnZUlubGluZXMuaAorKysgYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0lzb1BhZ2VJbmxp
bmVzLmgKQEAgLTE4OCw3ICsxODgsNyBAQCBGcmVlTGlzdCBJc29QYWdlPENvbmZpZz46OnN0YXJ0
QWxsb2NhdGluZygpCiAgICAgICAgIGNoYXIqIGNlbGxCeXRlID0gcmVpbnRlcnByZXRfY2FzdDxj
aGFyKj4odGhpcykgKyBpbmRleCAqIENvbmZpZzo6b2JqZWN0U2l6ZTsKICAgICAgICAgaWYgKHZl
cmJvc2UpCiAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVwOiBwdXR0aW5nICVwIG9uIGZy
ZWUgbGlzdC5cbiIsIHRoaXMsIGNlbGxCeXRlKTsKLSAgICAgICAgRnJlZUNlbGwqIGNlbGwgPSBy
ZWludGVycHJldF9jYXN0PEZyZWVDZWxsKj4oY2VsbEJ5dGUpOworICAgICAgICBGcmVlQ2VsbCog
Y2VsbCA9IGJpdHdpc2VfY2FzdDxGcmVlQ2VsbCo+KGNlbGxCeXRlKTsKICAgICAgICAgY2VsbC0+
c2V0TmV4dChoZWFkLCBzZWNyZXQpOwogICAgICAgICBoZWFkID0gY2VsbDsKICAgICAgICAgYnl0
ZXMgKz0gQ29uZmlnOjpvYmplY3RTaXplOwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL1dlYktp
dEZlYXR1cmVzLmNtYWtlIGIvU291cmNlL2NtYWtlL1dlYktpdEZlYXR1cmVzLmNtYWtlCmluZGV4
IDJkNTVmOTVhYmFhZjZhZTE1ZTkzYmQ3ZDdlYWFiMGNiOTllODA0ZTIuLjA0YmNmZTQwYzg1MTMy
MDc5NjI0YTZlMmRjYmYyYzBmZGY4Mzk4ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9XZWJL
aXRGZWF0dXJlcy5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2UvV2ViS2l0RmVhdHVyZXMuY21ha2UK
QEAgLTY4LDEyICs2OCwxMiBAQCBtYWNybyhXRUJLSVRfT1BUSU9OX0JFR0lOKQogICAgICAgICBz
ZXQoVVNFX1NZU1RFTV9NQUxMT0NfREVGQVVMVCBPRkYpCiAgICAgICAgIHNldChFTkFCTEVfQ19M
T09QX0RFRkFVTFQgT0ZGKQogICAgICAgICBzZXQoRU5BQkxFX1NBTVBMSU5HX1BST0ZJTEVSX0RF
RkFVTFQgT04pCi0gICAgZWxzZWlmIChXVEZfQ1BVX0FSTSBBTkQgV1RGX09TX1VOSVgpCi0gICAg
ICAgIHNldChFTkFCTEVfSklUX0RFRkFVTFQgT0ZGKQorICAgIGVsc2VpZiAoV1RGX0NQVV9BUk0g
QU5EIFdURl9PU19MSU5VWCkKKyAgICAgICAgc2V0KEVOQUJMRV9KSVRfREVGQVVMVCBPTikKICAg
ICAgICAgc2V0KEVOQUJMRV9GVExfREVGQVVMVCBPRkYpCiAgICAgICAgIHNldChVU0VfU1lTVEVN
X01BTExPQ19ERUZBVUxUIE9GRikKICAgICAgICAgc2V0KEVOQUJMRV9DX0xPT1BfREVGQVVMVCBP
RkYpCi0gICAgICAgIHNldChFTkFCTEVfU0FNUExJTkdfUFJPRklMRVJfREVGQVVMVCBPRkYpCisg
ICAgICAgIHNldChFTkFCTEVfU0FNUExJTkdfUFJPRklMRVJfREVGQVVMVCBPTikKICAgICBlbHNl
ICgpCiAgICAgICAgIHNldChFTkFCTEVfSklUX0RFRkFVTFQgT0ZGKQogICAgICAgICBzZXQoRU5B
QkxFX0ZUTF9ERUZBVUxUIE9GRikKZGlmZiAtLWdpdCBhL0NNYWtlTGlzdHMudHh0IGIvQ01ha2VM
aXN0cy50eHQKaW5kZXggOGUxODBkNGZiMTgyNzE0YzgzM2YzNDE3M2ExNGNjODgwMGM5MThlYi4u
ZmVhN2UzMGYyODlhY2M2YWNiMjRiNWRhNmFhOWEyOWExNDUxY2VhNyAxMDA2NDQKLS0tIGEvQ01h
a2VMaXN0cy50eHQKKysrIGIvQ01ha2VMaXN0cy50eHQKQEAgLTExMiw2ICsxMTIsOCBAQCBlbmRp
ZiAoKQogaWYgKFVOSVgpCiAgICAgaWYgKEFQUExFKQogICAgICAgICBzZXQoV1RGX09TX01BQ19P
U19YIDEpCisgICAgZWxzZWlmIChDTUFLRV9TWVNURU1fTkFNRSBNQVRDSEVTICJMaW51eCIpCisg
ICAgICAgIHNldChXVEZfT1NfTElOVVggMSkKICAgICBlbHNlICgpCiAgICAgICAgIHNldChXVEZf
T1NfVU5JWCAxKQogICAgIGVuZGlmICgpCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VM
b2cKaW5kZXggMDA1NTZiYjczN2I3ZmJhY2Q3NTZhNzg2NWU1Nzk3ZDA0MzAxNGNiNy4uYjE3MmY2
ZjJlNjIzMzgzZmI2MTkzMTA1MWRhZDk4MjJhMjE1NjdmOCAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9n
CisrKyBiL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE4LTExLTIwICBEb21pbmlrIElu
ZnVlaHIgIDxkaW5mdWVockBpZ2FsaWEuY29tPgorCisgICAgICAgIEVuYWJsZSBKSVQgb24gQVJN
L0xpbnV4CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
OTE1NDgKKworICAgICAgICBSZXZpZXdlZCBieSBZdXN1a2UgU3V6dWtpLgorCisgICAgICAgIEVu
YWJsZSBKSVQgYnkgZGVmYXVsdCBvbiBBUk12Ny9MaW51eCBhZnRlciBpdCB3YXMgZGlzYWJsZWQg
d2l0aAorICAgICAgICByZWNlbnQgYnl0Y29kZSBmb3JtYXQgY2hhbmdlLgorCisgICAgICAgICog
U291cmNlL2NtYWtlL1dlYktpdEZlYXR1cmVzLmNtYWtlOgorCiAyMDE4LTExLTE2ICBEb24gT2xt
c3RlYWQgIDxkb24ub2xtc3RlYWRAc29ueS5jb20+CiAKICAgICAgICAgQWRkIFVTRShMSUJXUEUp
IHRvIFdlYkNvcmUKZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFu
Z2VMb2cKaW5kZXggMjg1OGVhMWZhYzQzNGNlMmU5MGY4YTljNWM4Nzk5OTM2MzM4ODA0MS4uZmI0
OTIwMTg4MTc5MDQ3NzgzMzQ4ZGQ5Mzg1OTVmM2I3YWRjOGZiMCAxMDA2NDQKLS0tIGEvSlNUZXN0
cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAx
OC0xMS0yMCAgRG9taW5payBJbmZ1ZWhyICA8ZGluZnVlaHJAaWdhbGlhLmNvbT4KKworICAgICAg
ICBFbmFibGUgSklUIG9uIEFSTS9MaW51eAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTkxNTQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWXVzdWtlIFN1
enVraS4KKworICAgICAgICBEaXNhYmxlIHRlc3Qgb24gc3lzdGVtIHdpdGggbGltaXRlZCBtZW1v
cnkuIFByb2dyYW0gd2FzIGtpbGxlZCBieQorICAgICAgICB0aGUgT1MgYmVmb3JlIHRoZSBleGNl
cHRpb24gd2FzIHRocm93bi4KKworICAgICAgICAqIHNsb3dNaWNyb2JlbmNobWFya3MvZnVuY3Rp
b24tY29uc3RydWN0b3Itd2l0aC1odWdlLXN0cmluZ3MuanM6CisKIDIwMTgtMTEtMTkgIE1hcmsg
TGFtICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIGdsb2JhbEZ1bmNJbXBvcnRNb2R1
bGUoKSBzaG91bGQgcmV0dXJuIGEgcHJvbWlzZSB3aGVuIGl0IGNsZWFycyBleGNlcHRpb25zLgpk
aWZmIC0tZ2l0IGEvSlNUZXN0cy9zbG93TWljcm9iZW5jaG1hcmtzL2Z1bmN0aW9uLWNvbnN0cnVj
dG9yLXdpdGgtaHVnZS1zdHJpbmdzLmpzIGIvSlNUZXN0cy9zbG93TWljcm9iZW5jaG1hcmtzL2Z1
bmN0aW9uLWNvbnN0cnVjdG9yLXdpdGgtaHVnZS1zdHJpbmdzLmpzCmluZGV4IGM2MTNlZDg0ODNj
MTM3MDRkYjBhMjA2NWY5MmYxMzNhODQ4M2I0ZWUuLjg2NjE3MDU2MTVmODU2N2U1MTk1ZTYwOGMw
OTc0MDZmM2ExMjVkZGEgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvc2xvd01pY3JvYmVuY2htYXJrcy9m
dW5jdGlvbi1jb25zdHJ1Y3Rvci13aXRoLWh1Z2Utc3RyaW5ncy5qcworKysgYi9KU1Rlc3RzL3Ns
b3dNaWNyb2JlbmNobWFya3MvZnVuY3Rpb24tY29uc3RydWN0b3Itd2l0aC1odWdlLXN0cmluZ3Mu
anMKQEAgLTEsMyArMSw0IEBACisvL0Agc2tpcCBpZiAkbWVtb3J5TGltaXRlZAogdmFyIGh1Z2VT
dHJpbmcgPSAieCI7CiBmb3IgKGkgPSAwOyBpIDwgMjU7ICsraSkgewogICAgIGh1Z2VTdHJpbmcg
Kz0gaHVnZVN0cmluZzsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>355395</attachid>
            <date>2018-11-21 01:10:10 -0800</date>
            <delta_ts>2018-11-21 03:03:36 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-191548-20181121101008.patch</filename>
            <type>text/plain</type>
            <size>140289</size>
            <attacher name="Dominik Inführ">dominik.infuehr</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM4Mzk1CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAx
ZjIwNzNmMGY0NjNjMTYzYzIzNWQzMjMwZWNjNTBhNTc0OThlMmFjLi4wOGUwNzQwNGMzOGFhYTQx
MDM2OTlhY2ExMTEwMGRmZDIyZmVjZWQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxODkgQEAKKzIwMTgtMTEtMjAgIERvbWluaWsgSW5mdWVociAgPGRpbmZ1ZWhyQGlnYWxp
YS5jb20+CisKKyAgICAgICAgRW5hYmxlIEpJVCBvbiBBUk0vTGludXgKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTU0OAorCisgICAgICAgIFJldmll
d2VkIGJ5IFl1c3VrZSBTdXp1a2kuCisKKyAgICAgICAgRW5hYmxlIEpJVCBieSBkZWZhdWx0IG9u
IEFSTXY3L0xpbnV4IGFmdGVyIGl0IHdhcyBkaXNhYmxlZCB3aXRoCisgICAgICAgIHJlY2VudCBi
eXRjb2RlIGZvcm1hdCBjaGFuZ2UuCisKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3Bw
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmdldElDU3RhdHVzTWFwKToKKyAgICAgICAgKiBi
eXRlY29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjptZXRhZGF0YSk6
CisgICAgICAgICogYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6SW5C
eUlkU3RhdHVzOjpjb21wdXRlRm9yKToKKyAgICAgICAgKiBieXRlY29kZS9JbnN0cnVjdGlvbi5o
OgorICAgICAgICAoSlNDOjpJbnN0cnVjdGlvbjo6Y2FzdCk6CisgICAgICAgICogYnl0ZWNvZGUv
TWV0YWRhdGFUYWJsZS5oOgorICAgICAgICAoSlNDOjpNZXRhZGF0YVRhYmxlOjpmb3JFYWNoKToK
KyAgICAgICAgKiBieXRlY29kZS9QdXRCeUlkU3RhdHVzLmNwcDoKKyAgICAgICAgKEpTQzo6UHV0
QnlJZFN0YXR1czo6Y29tcHV0ZUZvcik6CisgICAgICAgIChKU0M6OlB1dEJ5SWRTdGF0dXM6Omhh
c0V4aXRTaXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9QdXRCeUlkU3RhdHVzLmg6
CisgICAgICAgICogZGZnL0RGR09TUkV4aXQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OnJlaWZ5
SW5saW5lZENhbGxGcmFtZXMpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21t
b24uY3BwOgorICAgICAgICAoSlNDOjpERkc6OnJlaWZ5SW5saW5lZENhbGxGcmFtZXMpOgorICAg
ICAgICAqIGdlbmVyYXRvci9Bcmd1bWVudC5yYjoKKyAgICAgICAgKiBnZW5lcmF0b3IvT3Bjb2Rl
LnJiOgorICAgICAgICAqIGppdC9HUFJJbmZvLmg6CisgICAgICAgICogaml0L0pJVC5oOgorICAg
ICAgICAqIGppdC9KSVRBcml0aG1ldGljMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfY29tcGFyZUFuZEp1bXApOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZVVuc2ln
bmVkQW5kSnVtcCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWQpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX3Vuc2lnbmVkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lu
Yyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9kZWMpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRCaW5hcnlEb3VibGVPcCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9tb2QpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX21vZCk6CisgICAgICAgICogaml0L0pJVENh
bGwzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dENhbGxSZXN1bHQpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcmV0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xv
d19vcF9jYWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF90YWlsX2NhbGwpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2NhbGxfZXZhbCk6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
U2xvd19vcF90YWlsX2NhbGxfdmFyYXJncyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3df
b3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3df
b3BfY29uc3RydWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NhbGwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfdGFpbF9jYWxsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
X29wX2NhbGxfZXZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jYWxsX3ZhcmFyZ3Mp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2NvbnN0cnVjdF92YXJhcmdzKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2NvbnN0cnVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZVNldHVw
RnJhbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVDYWxsRXZhbCk6CisgICAgICAgIChK
U0M6OkpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmNv
bXBpbGVPcENhbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZSk6
CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZVNldHVwVmFyYXJnc0ZyYW1lKTogRGVsZXRlZC4K
KyAgICAgICAgKiBqaXQvSklUSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpKSVQ6OnVwZGF0ZVRv
cENhbGxGcmFtZSk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfY2F0Y2gpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2xv
b3BfaGludCk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMzMl82NC5jcHA6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9tb3YpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW5kKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2ptcCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9uZXdfb2JqZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9uZXdfb2Jq
ZWN0KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX292ZXJyaWRlc19oYXNfaW5zdGFuY2Up
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaW5zdGFuY2VvZik6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3RvbSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFNsb3dfb3BfaW5zdGFuY2VvZik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfaW5z
dGFuY2VvZl9jdXN0b20pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfZW1wdHkpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2lzX2Jvb2xlYW4pOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfaXNf
bnVtYmVyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX2NlbGxfd2l0aF90eXBlKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2lzX29iamVjdCk6CisgICAgICAgIChKU0M6OkpJ
VDo6ZW1pdF9vcF90b19wcmltaXRpdmUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfc2V0
X2Z1bmN0aW9uX25hbWUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bfbm90KToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2pmYWxzZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9v
cF9qdHJ1ZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9qZXFfbnVsbCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9qbmVxX251bGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3Bfam5lcV9wdHIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZXEpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRTbG93X29wX2VxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2pl
cSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfamVxKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX25lcSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfbmVxKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2puZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRTbG93X29wX2puZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcFN0cmljdEVxKToK
KyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N0cmljdGVxKToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0X29wX25zdHJpY3RlcSk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wU3RyaWN0
RXFKdW1wKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2pzdHJpY3RlcSk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9qbnN0cmljdGVxKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
U2xvd19vcF9qc3RyaWN0ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2puc3Ry
aWN0ZXEpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZXFfbnVsbCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdF9vcF9uZXFfbnVsbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90
aHJvdyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF90b19udW1iZXIpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfdG9fc3RyaW5nKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X3RvX29iamVjdCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jYXRjaCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF9pZGVudGl0eV93aXRoX3Byb2ZpbGUpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfZ2V0X3BhcmVudF9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dF9vcF9zd2l0Y2hfaW1tKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRjaF9jaGFy
KToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3N3aXRjaF9zdHJpbmcpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfZGVidWcpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZW50
ZXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X3Njb3BlKToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2NyZWF0ZV90aGlzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29w
X3RvX3RoaXMpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2hlY2tfdGR6KToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2hhc19zdHJ1Y3R1cmVfcHJvcGVydHkpOgorICAgICAgICAo
SlNDOjpKSVQ6OnByaXZhdGVDb21waWxlSGFzSW5kZXhlZFByb3BlcnR5KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KToKKyAgICAgICAgKEpTQzo6SklU
OjplbWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eSk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2Vu
dW1lcmF0b3Jfc3RydWN0dXJlX3BuYW1lKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2Vu
dW1lcmF0b3JfZ2VuZXJpY19wbmFtZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wcm9m
aWxlX3R5cGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2Vu
X3Byb2xvZ3VlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tl
bl90YWlsKToKKyAgICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHA6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X2lkKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRf
b3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3Bf
cHV0X2dldHRlcl9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3NldHRl
cl9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZGVsX2J5X2lkKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX2RlbF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfZ2V0X2J5X3ZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdEdldEJ5VmFsV2l0aENh
Y2hlZElkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV92YWxfZGlyZWN0KToKKyAgICAgICAgKEpT
Qzo6SklUOjplbWl0X29wX3B1dF9ieV92YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRHZW5l
cmljQ29udGlndW91c1B1dEJ5VmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0QXJyYXlTdG9y
YWdlUHV0QnlWYWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRCeVZhbFdpdGhDYWNoZWRJ
ZCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X3ZhbCk6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjpl
bWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2dl
dF9ieV9pZF9kaXJlY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2dldF9ieV9p
ZF9kaXJlY3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkKToKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6
OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNs
b3dfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9w
dXRfYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV9pZCk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9pbl9ieV9pZCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdFNsb3dfb3BfaW5fYnlfaWQpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcmVzb2x2
ZV9zY29wZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZSk6Cisg
ICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2Zyb21fc2NvcGUpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfcHV0X3RvX3Njb3BlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0
U2xvd19vcF9wdXRfdG9fc2NvcGUpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfZ2V0X2Zy
b21fYXJndW1lbnRzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF90b19hcmd1bWVu
dHMpOgorICAgICAgICAqIGppdC9SZWdpc3RlclNldC5jcHA6CisgICAgICAgIChKU0M6OlJlZ2lz
dGVyU2V0Ojp2bUNhbGxlZVNhdmVSZWdpc3RlcnMpOgorICAgICAgICAqIGxsaW50L0xMSW50RGF0
YS5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpEYXRhOjpwZXJmb3JtQXNzZXJ0aW9ucyk6Cisg
ICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAgICogcnVudGlt
ZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcDoKKyAgICAgICAgKEpTQzo6dHJ5R2V0Qnl0ZWNvZGVJbmRl
eCk6CisKIDIwMTgtMTEtMjAgIEZ1amlpIEhpcm9ub3JpICA8SGlyb25vcmkuRnVqaWlAc29ueS5j
b20+CiAKICAgICAgICAgUkVHUkVTU0lPTihyMjM4MDM5KSBXZWJDb3JlOjpKU0RPTUdsb2JhbE9i
amVjdDo6Y3JlYXRlU3RydWN0dXJlIGlzIHVzaW5nIEpTQzo6U3RydWN0dXJlOjpjcmVhdGUgd2l0
aG91dCBpbmNsdWRpbmcgU3RydWN0dXJlSW5saW5lcy5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L0NoYW5nZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGQxMWQ5ZGVmOGIxMzhiNzEx
MTYwMWFhYmVjYTM1OGQ4MTAxMDJhNzcuLmU4MWNjZDgxNmNiZGQ4MGJjMTViYTVlYTdkNWE1NDMz
Mjg0Mzg4NWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9X
VEYvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTgtMTEtMjAgIERvbWluaWsgSW5mdWVo
ciAgPGRpbmZ1ZWhyQGlnYWxpYS5jb20+CisKKyAgICAgICAgRW5hYmxlIEpJVCBvbiBBUk0vTGlu
dXgKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE5MTU0
OAorCisgICAgICAgIFJldmlld2VkIGJ5IFl1c3VrZSBTdXp1a2kuCisKKyAgICAgICAgRW5hYmxl
IEpJVCBieSBkZWZhdWx0IG9uIEFSTXY3L0xpbnV4IGFmdGVyIGl0IHdhcyBkaXNhYmxlZCB3aXRo
CisgICAgICAgIHJlY2VudCBieXRjb2RlIGZvcm1hdCBjaGFuZ2UuCisKKyAgICAgICAgKiB3dGYv
UGxhdGZvcm0uaDoKKwogMjAxOC0xMS0xNCAgS2VpdGggUm9sbGluICA8a3JvbGxpbkBhcHBsZS5j
b20+CiAKICAgICAgICAgRml4ICNlbmQgdnMuICNlbmRpZiB0eXBvLgpkaWZmIC0tZ2l0IGEvU291
cmNlL2JtYWxsb2MvQ2hhbmdlTG9nIGIvU291cmNlL2JtYWxsb2MvQ2hhbmdlTG9nCmluZGV4IDM3
YWRmZTgwYjgxYTNlY2ZjOWRhNTQzZjBlN2M3NWM0ZWIwNDVmMWYuLjI3Zjc2NDZmYzE4MWQyM2Uw
OTBjMWYyNWU0YTFlZTA2MzdhZGMzYTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9ibWFsbG9jL0NoYW5n
ZUxvZworKysgYi9Tb3VyY2UvYm1hbGxvYy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAx
OC0xMS0yMCAgRG9taW5payBJbmZ1ZWhyICA8ZGluZnVlaHJAaWdhbGlhLmNvbT4KKworICAgICAg
ICBFbmFibGUgSklUIG9uIEFSTS9MaW51eAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MTkxNTQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWXVzdWtlIFN1
enVraS4KKworICAgICAgICAqIGJtYWxsb2MvSXNvUGFnZUlubGluZXMuaDoKKyAgICAgICAgKGJt
YWxsb2M6Oklzb1BhZ2U8Q29uZmlnPjo6c3RhcnRBbGxvY2F0aW5nKToKKwogMjAxOC0xMS0wMSAg
Smlld2VuIFRhbiAgPGppZXdlbl90YW5AYXBwbGUuY29tPgogCiAgICAgICAgIFJlcGxhY2UgQ29t
bW9uUmFuZG9tIFNQSSB3aXRoIEFQSQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nv
ZGVCbG9jay5oCmluZGV4IDI5YTYwNWI5ZjYwNjcyMzMzMjkwYWI2ZjQwNzc3OGM0ODhiYzg1ZGQu
LmU3YzY2ZTI1MzQwZjg2ZDZhMGFhOWI0MDhhOGNhNmQ0NDdkYWFjMmIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgKQEAgLTg2MCw3ICs4NjAsNyBAQCBwdWJs
aWM6CiAgICAgTWV0YWRhdGEmIG1ldGFkYXRhKE9wY29kZUlEIG9wY29kZUlELCB1bnNpZ25lZCBt
ZXRhZGF0YUlEKQogICAgIHsKICAgICAgICAgQVNTRVJUKG1fbWV0YWRhdGEpOwotICAgICAgICBy
ZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxNZXRhZGF0YSo+KG1fbWV0YWRhdGEtPmdldChvcGNvZGVJ
RCkpW21ldGFkYXRhSURdOworICAgICAgICByZXR1cm4gYml0d2lzZV9jYXN0PE1ldGFkYXRhKj4o
bV9tZXRhZGF0YS0+Z2V0KG9wY29kZUlEKSlbbWV0YWRhdGFJRF07CiAgICAgfQogCiAgICAgc2l6
ZV90IG1ldGFkYXRhU2l6ZUluQnl0ZXMoKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvSW5zdHJ1Y3Rpb24uaAppbmRleCBkOTRmYzY3MThkNTNhYzkwYWNmZDZjZDI1MWIyMzQ4MmE3
Njk1NDI0Li5jYjgyNmNkZmI1ZTVkM2Y5NWQzMjk0ZTU2YTJiMDRjNWQ0NDdjMDBmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaAorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaApAQCAtOTEsNyArOTEs
NyBAQCBwdWJsaWM6CiAgICAgVCogY2FzdCgpCiAgICAgewogICAgICAgICBBU1NFUlQoaXM8VD4o
KSk7Ci0gICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFQqPih0aGlzKTsKKyAgICAgICAg
cmV0dXJuIGJpdHdpc2VfY2FzdDxUKj4odGhpcyk7CiAgICAgfQogCiAgICAgdGVtcGxhdGU8Y2xh
c3MgVD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVj
dGlvblN0cmVhbS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rp
b25TdHJlYW0uY3BwCmluZGV4IDE0NjFhZmRhMjg1MjA4MGE4NmNiNjIzMGIyMzljZTI4ZGIyZDMw
MzYuLjUxNGNmMTEyNTNlYjRhMjg2OTRjODBmZThlNTIyYTYyMzNmZDk3NzMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvblN0cmVhbS5jcHAKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uU3RyZWFtLmNwcApA
QCAtNDAsNCArNDAsMTEgQEAgc2l6ZV90IEluc3RydWN0aW9uU3RyZWFtOjpzaXplSW5CeXRlcygp
IGNvbnN0CiAgICAgcmV0dXJuIG1faW5zdHJ1Y3Rpb25zLnNpemUoKTsKIH0KIAorYm9vbCBJbnN0
cnVjdGlvblN0cmVhbTo6Y29udGFpbnMoSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKSBjb25zdAor
eworCisgICAgY29uc3QgdWludDhfdCogcG9pbnRlciA9IGJpdHdpc2VfY2FzdDxjb25zdCB1aW50
OF90Kj4oaW5zdHJ1Y3Rpb24pOworICAgIHJldHVybiBwb2ludGVyID49IG1faW5zdHJ1Y3Rpb25z
LmRhdGEoKSAmJiBwb2ludGVyIDwgKG1faW5zdHJ1Y3Rpb25zLmRhdGEoKSArIG1faW5zdHJ1Y3Rp
b25zLnNpemUoKSk7Cit9CisKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9JbnN0cnVjdGlvblN0cmVhbS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0luc3RydWN0aW9uU3RyZWFtLmgKaW5kZXggNDRiNGJlNzRjZTg3ZTJlM2U2OWYzMzc5NjJj
MDUxMWY0YzA0NWJlMS4uNzBlZGUzZTQxYzVkNWM0ODlkNzk2ZmNmYzBjMWNjZDk5OGQyOWVkNSAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uU3Ry
ZWFtLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uU3Ry
ZWFtLmgKQEAgLTE2Nyw2ICsxNjcsOCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX2luc3Ry
dWN0aW9ucy5kYXRhKCk7CiAgICAgfQogCisgICAgYm9vbCBjb250YWlucyhJbnN0cnVjdGlvbiAq
KSBjb25zdDsKKwogcHJvdGVjdGVkOgogICAgIGV4cGxpY2l0IEluc3RydWN0aW9uU3RyZWFtKElu
c3RydWN0aW9uQnVmZmVyJiYpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvTWV0YWRhdGFUYWJsZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L01ldGFkYXRhVGFibGUuaAppbmRleCA2MGNkZTVmNWFhMTI4MTUyMjhiMzY2YzA4OTkwNTJlNTcz
NThmY2FlLi5hNWQ0MTIxYjFkNDFkMTYxYmYyNjU0MmUwOTI4NmNmYmQ5OTM5NWI4IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvTWV0YWRhdGFUYWJsZS5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9NZXRhZGF0YVRhYmxlLmgKQEAgLTU1LDgg
KzU1LDggQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lIE9wLCB0eXBlbmFtZSBGdW5j
dG9yPgogICAgIEFMV0FZU19JTkxJTkUgdm9pZCBmb3JFYWNoKGNvbnN0IEZ1bmN0b3ImIGZ1bmMp
CiAgICAgewotICAgICAgICBhdXRvKiBtZXRhZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dHlwZW5h
bWUgT3A6Ok1ldGFkYXRhKj4oZ2V0KE9wOjpvcGNvZGVJRCkpOwotICAgICAgICBhdXRvKiBlbmQg
PSByZWludGVycHJldF9jYXN0PHR5cGVuYW1lIE9wOjpNZXRhZGF0YSo+KGdldEltcGwoT3A6Om9w
Y29kZUlEICsgMSkpOworICAgICAgICBhdXRvKiBtZXRhZGF0YSA9IGJpdHdpc2VfY2FzdDx0eXBl
bmFtZSBPcDo6TWV0YWRhdGEqPihnZXQoT3A6Om9wY29kZUlEKSk7CisgICAgICAgIGF1dG8qIGVu
ZCA9IGJpdHdpc2VfY2FzdDx0eXBlbmFtZSBPcDo6TWV0YWRhdGEqPihnZXRJbXBsKE9wOjpvcGNv
ZGVJRCArIDEpKTsKICAgICAgICAgZm9yICg7IG1ldGFkYXRhICsgMSA8PSBlbmQ7ICsrbWV0YWRh
dGEpCiAgICAgICAgICAgICBmdW5jKCptZXRhZGF0YSk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT1NSRXhpdC5jcHAKaW5kZXggMTJiMzRlMmY0MWI4NzkxYWRkZmEwZGE3YTY0
YWY5OWIyNTAzODlmZS4uNmVhOTc3NjljMDlkMzJiOTM2ZTA0Yzg3ZTg0YzhjOGRlZWQ0YTBhNCAx
MDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0LmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXQuY3BwCkBAIC04MTEsNyArODEx
LDcgQEAgc3RhdGljIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDb250ZXh0JiBjb250ZXh0
LCBDb2RlQmxvY2sqIG91dGVybW9zdEJhc2VsaW4KICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJh
bWUtPmlzQ2xvc3VyZUNhbGwpCiAgICAgICAgICAgICBmcmFtZS5zZXRPcGVyYW5kKGlubGluZUNh
bGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBDYWxsRnJhbWVTbG90OjpjYWxsZWUsIEpTVmFsdWUoaW5s
aW5lQ2FsbEZyYW1lLT5jYWxsZWVDb25zdGFudCgpKSk7CiAjZWxzZSAvLyBVU0UoSlNWQUxVRTY0
KSAvLyBzbyB0aGlzIGlzIHRoZSAzMi1iaXQgcGFydAotICAgICAgICBJbnN0cnVjdGlvbiogaW5z
dHJ1Y3Rpb24gPSAmYmFzZWxpbmVDb2RlQmxvY2stPmluc3RydWN0aW9ucygpW2NvZGVPcmlnaW4t
PmJ5dGVjb2RlSW5kZXhdOworICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24g
PSBiYXNlbGluZUNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoY29kZU9yaWdpbi0+Ynl0ZWNv
ZGVJbmRleCkucHRyKCk7CiAgICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRl
SW5kZXgoaW5zdHJ1Y3Rpb24pLmJpdHMoKTsKICAgICAgICAgZnJhbWUuc2V0T3BlcmFuZDx1aW50
MzJfdD4oaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnQsIFRhZ09mZnNldCwgbG9jYXRpb25CaXRzKTsKICAgICAgICAgZnJhbWUuc2V0T3Bl
cmFuZDx1aW50MzJfdD4oaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNs
b3Q6OmNhbGxlZSwgVGFnT2Zmc2V0LCBzdGF0aWNfY2FzdDx1aW50MzJfdD4oSlNWYWx1ZTo6Q2Vs
bFRhZykpOwpAQCAtODI1LDcgKzgyNSw3IEBAIHN0YXRpYyB2b2lkIHJlaWZ5SW5saW5lZENhbGxG
cmFtZXMoQ29udGV4dCYgY29udGV4dCwgQ29kZUJsb2NrKiBvdXRlcm1vc3RCYXNlbGluCiAjaWYg
VVNFKEpTVkFMVUU2NCkKICAgICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJ
bmRleChjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KS5iaXRzKCk7CiAjZWxzZQotICAgICAgICBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSAmb3V0ZXJtb3N0QmFzZWxpbmVDb2RlQmxvY2stPmlu
c3RydWN0aW9ucygpW2NvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXhdOworICAgICAgICBjb25zdCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBvdXRlcm1vc3RCYXNlbGluZUNvZGVCbG9jay0+aW5z
dHJ1Y3Rpb25zKCkuYXQoY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgICAg
IHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoaW5zdHJ1Y3Rpb24pLmJpdHMo
KTsKICNlbmRpZgogICAgICAgICBmcmFtZS5zZXRPcGVyYW5kPHVpbnQzMl90PihDYWxsRnJhbWVT
bG90Ojphcmd1bWVudENvdW50LCBUYWdPZmZzZXQsIGxvY2F0aW9uQml0cyk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAK
aW5kZXggMTExZWJkMzJiMDdiYzk4YzYwMTU0OGFmYTlmYjI3N2QzZmFjNDBlNy4uYzFhYjg0Njhh
NTBjYmM1MzFlMmJmOTNiYjc0YjExNTZkYTJlOTQyMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcApAQCAtMjM3LDcg
KzIzNyw3IEBAIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMmIGppdCwg
Y29uc3QgT1NSRXhpdEJhc2UmIGV4aXQpCiAgICAgICAgICAgICBqaXQuc3RvcmU2NChBc3NlbWJs
eUhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShpbmxpbmVDYWxs
RnJhbWUtPmNhbGxlZUNvbnN0YW50KCkpKSksIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0Zvcigo
VmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1l
U2xvdDo6Y2FsbGVlKSkpOwogI2Vsc2UgLy8gVVNFKEpTVkFMVUU2NCkgLy8gc28gdGhpcyBpcyB0
aGUgMzItYml0IHBhcnQKICAgICAgICAgaml0LnN0b3JlUHRyKGNhbGxlckZyYW1lR1BSLCBBc3Nl
bWJseUhlbHBlcnM6OmFkZHJlc3NGb3JCeXRlT2Zmc2V0KGlubGluZUNhbGxGcmFtZS0+Y2FsbGVy
RnJhbWVPZmZzZXQoKSkpOwotICAgICAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSAmYmFz
ZWxpbmVDb2RlQmxvY2stPmluc3RydWN0aW9ucygpW2NvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXhd
OworICAgICAgICBjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBiYXNlbGluZUNvZGVC
bG9jay0+aW5zdHJ1Y3Rpb25zKCkuYXQoY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCkucHRyKCk7
CiAgICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoaW5zdHJ1Y3Rp
b24pLmJpdHMoKTsKICAgICAgICAgaml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVk
SW1tMzIobG9jYXRpb25CaXRzKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdp
c3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIENhbGxGcmFtZVNsb3Q6OmFyZ3Vt
ZW50Q291bnQpKSk7CiAgICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3Rl
ZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVh
bFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgQ2FsbEZyYW1lU2xvdDo6
Y2FsbGVlKSkpOwpAQCAtMjUxLDcgKzI1MSw3IEBAIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1l
cyhDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgT1NSRXhpdEJhc2UmIGV4aXQpCiAjaWYgVVNFKEpT
VkFMVUU2NCkKICAgICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChj
b2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KS5iaXRzKCk7CiAjZWxzZQotICAgICAgICBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb24gPSAmaml0LmJhc2VsaW5lQ29kZUJsb2NrKCktPmluc3RydWN0aW9u
cygpW2NvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXhdOworICAgICAgICBjb25zdCBJbnN0cnVjdGlv
biogaW5zdHJ1Y3Rpb24gPSBqaXQuYmFzZWxpbmVDb2RlQmxvY2soKS0+aW5zdHJ1Y3Rpb25zKCku
YXQoY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCkucHRyKCk7CiAgICAgICAgIHVpbnQzMl90IGxv
Y2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoaW5zdHJ1Y3Rpb24pLmJpdHMoKTsKICNlbmRpZgog
ICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihsb2NhdGlv
bkJpdHMpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKShDYWxsRnJh
bWVTbG90Ojphcmd1bWVudENvdW50KSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2dlbmVyYXRvci9Bcmd1bWVudC5yYiBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0
b3IvQXJndW1lbnQucmIKaW5kZXggZjVkZGY1MDVjNDE0NWIxYjdiZGYyNGM3MTllMzY4OWVmZmI1
YzEyNC4uZTY5ZjhhYjRhYWFiN2JiZTFkNGUyODdiZWU5NDA1NjYzNjIxNWI2NiAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9Bcmd1bWVudC5yYgorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZ2VuZXJhdG9yL0FyZ3VtZW50LnJiCkBAIC03NCw3ICs3NCw3IEBA
IGNsYXNzIEFyZ3VtZW50CiAgICAgICAgIHsKICAgICAgICAgICAgIGlmICghI3tGaXRzOjpjaGVj
ayAic2l6ZSIsICJ2YWx1ZSIsIEB0eXBlfSkKICAgICAgICAgICAgICAgICB2YWx1ZSA9IGZ1bmMo
KTsKLSAgICAgICAgICAgIGF1dG8qIHN0cmVhbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8dHlwZW5hbWUg
VHlwZUJ5U2l6ZTxzaXplPjo6dHlwZSo+KHJlaW50ZXJwcmV0X2Nhc3Q8dWludDhfdCo+KHRoaXMp
ICsgI3tAaW5kZXh9ICogc2l6ZSArIFBhZGRpbmdCeVNpemU8c2l6ZT46OnZhbHVlKTsKKyAgICAg
ICAgICAgIGF1dG8qIHN0cmVhbSA9IGJpdHdpc2VfY2FzdDx0eXBlbmFtZSBUeXBlQnlTaXplPHNp
emU+Ojp0eXBlKj4ocmVpbnRlcnByZXRfY2FzdDx1aW50OF90Kj4odGhpcykgKyAje0BpbmRleH0g
KiBzaXplICsgUGFkZGluZ0J5U2l6ZTxzaXplPjo6dmFsdWUpOwogICAgICAgICAgICAgKnN0cmVh
bSA9ICN7Rml0czo6Y29udmVydCAic2l6ZSIsICJ2YWx1ZSIsIEB0eXBlfTsKICAgICAgICAgfQog
ICAgICAgICBFT0YKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9nZW5lcmF0b3Iv
T3Bjb2RlLnJiIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dlbmVyYXRvci9PcGNvZGUucmIKaW5k
ZXggYjBhNGUwYTQyZTU5NzkwMzM3M2UwOWE1OTdjZTFlYjFmM2M5MWFjZC4uZWFlMDBjNTc2ZDFk
ODE4ZWM2MzFlZDlkMWY4Y2ZiOGIzMmU1MmVhOSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2dlbmVyYXRvci9PcGNvZGUucmIKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2dl
bmVyYXRvci9PcGNvZGUucmIKQEAgLTE5Miw3ICsxOTIsNyBAQCBjbGFzcyBPcGNvZGUKICAgICAg
ICAgICAgIGlmICgqc3RyZWFtICE9IG9wX3dpZGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIHsg
c3RyZWFtIH07CiAKLSAgICAgICAgICAgIGF1dG8gd2lkZVN0cmVhbSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8Y29uc3QgdWludDMyX3QqPihzdHJlYW0gKyAxKTsKKyAgICAgICAgICAgIGF1dG8gd2lkZVN0
cmVhbSA9IGJpdHdpc2VfY2FzdDxjb25zdCB1aW50MzJfdCo+KHN0cmVhbSArIDEpOwogICAgICAg
ICAgICAgcmV0dXJuIHsgd2lkZVN0cmVhbSB9OwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvR1BSSW5mby5oIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9HUFJJbmZvLmgKaW5kZXggZjE1YWU4Mzc1YjM0MTM3NDZjMWUzNzk4ODdlODNhMTMxNjcz
Mjk0NC4uMWEwYTVjOTc0MmI0ZGI3Y2RlYThjODk2NTUzNmMzMGU5YjlmYTc2NSAxMDA2NDQKLS0t
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9HUFJJbmZvLmgKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9HUFJJbmZvLmgKQEAgLTUyOCw3ICs1MjgsMTEgQEAgcHVibGljOgogCiAj
aWYgQ1BVKEFSTSkKICNkZWZpbmUgTlVNQkVSX09GX0FSR1VNRU5UX1JFR0lTVEVSUyA0dQorI2lm
IENQVShBUk1fVEhVTUIyKQorI2RlZmluZSBOVU1CRVJfT0ZfQ0FMTEVFX1NBVkVTX1JFR0lTVEVS
UyAxdQorI2Vsc2UKICNkZWZpbmUgTlVNQkVSX09GX0NBTExFRV9TQVZFU19SRUdJU1RFUlMgMHUK
KyNlbmRpZgogCiBjbGFzcyBHUFJJbmZvIHsKIHB1YmxpYzoKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5o
CmluZGV4IDZkYjRkN2Y2YWRlM2FlZDQ2MDhkMDIyMzU2MTBlNzNkMDVkNWNlOTcuLjM5NWY1Mzg2
ZjI5ZTkwNDY3N2Q1YjBmNzYyNDZkOTRmYzliYTY4NzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
aApAQCAtNDU3LDcgKzQ1Nyw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGNvbXBp
bGVHZXRCeUlkSG90UGF0aChjb25zdCBJZGVudGlmaWVyKik7CiAKICAgICAgICAgLy8gQXJpdGht
ZXRpYyBvcGNvZGUgaGVscGVycwotICAgICAgICB2b2lkIGVtaXRCaW5hcnlEb3VibGVPcChPcGNv
ZGVJRCwgaW50IGRzdCwgaW50IG9wMSwgaW50IG9wMiwgT3BlcmFuZFR5cGVzLCBKdW1wTGlzdCYg
bm90SW50MzJPcDEsIEp1bXBMaXN0JiBub3RJbnQzMk9wMiwgYm9vbCBvcDFJc0luUmVnaXN0ZXJz
ID0gdHJ1ZSwgYm9vbCBvcDJJc0luUmVnaXN0ZXJzID0gdHJ1ZSk7CisgICAgICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBPcD4KKyAgICAgICAgdm9pZCBlbWl0QmluYXJ5RG91YmxlT3AoY29uc3QgSW5z
dHJ1Y3Rpb24gKiwgT3BlcmFuZFR5cGVzLCBKdW1wTGlzdCYgbm90SW50MzJPcDEsIEp1bXBMaXN0
JiBub3RJbnQzMk9wMiwgYm9vbCBvcDFJc0luUmVnaXN0ZXJzID0gdHJ1ZSwgYm9vbCBvcDJJc0lu
UmVnaXN0ZXJzID0gdHJ1ZSk7CiAKICNlbHNlIC8vIFVTRShKU1ZBTFVFMzJfNjQpCiAgICAgICAg
IHZvaWQgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihpbnQgc3JjLCBSZWdpc3RlcklEIGRzdCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMzMl82NC5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVEFyaXRobWV0aWMzMl82NC5jcHAKaW5k
ZXggZDNlYmRiNjdjNTIxY2I2OTlmMzdlMDk4OTIwN2E0ZTIxZTc5Y2M1My4uOGJlNzQ1ZGYzMjBi
Y2Y0MmUzMDcxYjMyZjI5YTNiZjY4YmJhNDZhNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRBcml0aG1ldGljMzJfNjQuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUQXJpdGhtZXRpYzMyXzY0LmNwcApAQCAtNDEsMTEgKzQxLDE3IEBACiAKIG5h
bWVzcGFjZSBKU0MgewogCi12b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcChPcGNvZGVJRCBv
cGNvZGUsIGludCBvcDEsIGludCBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpb25hbENvbmRp
dGlvbiBjb25kaXRpb24pCit0ZW1wbGF0ZSA8dHlwZW5hbWUgT3A+Cit2b2lkIEpJVDo6ZW1pdF9j
b21wYXJlQW5kSnVtcChjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFJlbGF0aW9uYWxD
b25kaXRpb24gY29uZGl0aW9uKQogewogICAgIEp1bXBMaXN0IG5vdEludDMyT3AxOwogICAgIEp1
bXBMaXN0IG5vdEludDMyT3AyOwogCisgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5h
czxPcD4oKTsKKyAgICBpbnQgb3AxID0gYnl0ZWNvZGUubGhzLm9mZnNldCgpOworICAgIGludCBv
cDIgPSBieXRlY29kZS5yaHMub2Zmc2V0KCk7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRh
cmdldChpbnN0cnVjdGlvbiwgYnl0ZWNvZGUudGFyZ2V0KTsKKwogICAgIC8vIENoYXJhY3RlciBs
ZXNzLgogICAgIGlmIChpc09wZXJhbmRDb25zdGFudENoYXIob3AxKSkgewogICAgICAgICBlbWl0
TG9hZChvcDIsIHJlZ1QxLCByZWdUMCk7CkBAIC04OCwxMiArOTQsMTggQEAgdm9pZCBKSVQ6OmVt
aXRfY29tcGFyZUFuZEp1bXAoT3Bjb2RlSUQgb3Bjb2RlLCBpbnQgb3AxLCBpbnQgb3AyLCB1bnNp
Z25lZCB0YXJnZXQKICAgICBKdW1wIGVuZCA9IGp1bXAoKTsKIAogICAgIC8vIERvdWJsZSBsZXNz
LgotICAgIGVtaXRCaW5hcnlEb3VibGVPcChvcGNvZGUsIHRhcmdldCwgb3AxLCBvcDIsIE9wZXJh
bmRUeXBlcygpLCBub3RJbnQzMk9wMSwgbm90SW50MzJPcDIsICFpc09wZXJhbmRDb25zdGFudElu
dChvcDEpLCBpc09wZXJhbmRDb25zdGFudEludChvcDEpIHx8ICFpc09wZXJhbmRDb25zdGFudElu
dChvcDIpKTsKKyAgICBlbWl0QmluYXJ5RG91YmxlT3A8T3A+KGluc3RydWN0aW9uLCBPcGVyYW5k
VHlwZXMoKSwgbm90SW50MzJPcDEsIG5vdEludDMyT3AyLCAhaXNPcGVyYW5kQ29uc3RhbnRJbnQo
b3AxKSwgaXNPcGVyYW5kQ29uc3RhbnRJbnQob3AxKSB8fCAhaXNPcGVyYW5kQ29uc3RhbnRJbnQo
b3AyKSk7CiAgICAgZW5kLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0X2NvbXBhcmVV
bnNpZ25lZEFuZEp1bXAoaW50IG9wMSwgaW50IG9wMiwgdW5zaWduZWQgdGFyZ2V0LCBSZWxhdGlv
bmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQgSklU
OjplbWl0X2NvbXBhcmVVbnNpZ25lZEFuZEp1bXAoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKKyAgICBhdXRvIGJ5dGVjb2Rl
ID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOworICAgIGludCBvcDEgPSBieXRlY29kZS5saHMub2Zm
c2V0KCk7CisgICAgaW50IG9wMiA9IGJ5dGVjb2RlLnJocy5vZmZzZXQoKTsKKyAgICB1bnNpZ25l
ZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS50YXJnZXQpOworCiAg
ICAgaWYgKGlzT3BlcmFuZENvbnN0YW50SW50KG9wMSkpIHsKICAgICAgICAgZW1pdExvYWQob3Ay
LCByZWdUMywgcmVnVDIpOwogICAgICAgICBhZGRKdW1wKGJyYW5jaDMyKGNvbW11dGUoY29uZGl0
aW9uKSwgcmVnVDIsIEltbTMyKGdldENvbnN0YW50T3BlcmFuZChvcDEpLmFzSW50MzIoKSkpLCB0
YXJnZXQpOwpAQCAtMTA2LDkgKzExOCwxNCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWdu
ZWRBbmRKdW1wKGludCBvcDEsIGludCBvcDIsIHVuc2lnbmVkIHRhcmdldCwgUmVsYXRpbwogICAg
IH0KIH0KIAotCi12b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWQoaW50IGRzdCwgaW50IG9w
MSwgaW50IG9wMiwgUmVsYXRpb25hbENvbmRpdGlvbiBjb25kaXRpb24pCit0ZW1wbGF0ZSA8dHlw
ZW5hbWUgT3A+Cit2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWQoY29uc3QgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uLCBSZWxhdGlvbmFsQ29uZGl0aW9uIGNvbmRpdGlvbikKIHsKKyAgICBh
dXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wPigpOworICAgIGludCBkc3QgPSBieXRl
Y29kZS5kc3Qub2Zmc2V0KCk7CisgICAgaW50IG9wMSA9IGJ5dGVjb2RlLmxocy5vZmZzZXQoKTsK
KyAgICBpbnQgb3AyID0gYnl0ZWNvZGUucmhzLm9mZnNldCgpOworCiAgICAgaWYgKGlzT3BlcmFu
ZENvbnN0YW50SW50KG9wMSkpIHsKICAgICAgICAgZW1pdExvYWQob3AyLCByZWdUMywgcmVnVDIp
OwogICAgICAgICBjb21wYXJlMzIoY29tbXV0ZShjb25kaXRpb24pLCByZWdUMiwgSW1tMzIoZ2V0
Q29uc3RhbnRPcGVyYW5kKG9wMSkuYXNJbnQzMigpKSwgcmVnVDApOwpAQCAtMTIyLDggKzEzOSwx
NCBAQCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlVW5zaWduZWQoaW50IGRzdCwgaW50IG9wMSwgaW50
IG9wMiwgUmVsYXRpb25hbENvbmRpdGlvbiBjbwogICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZWdU
MCk7CiB9CiAKLXZvaWQgSklUOjplbWl0X2NvbXBhcmVBbmRKdW1wU2xvdyhpbnQgb3AxLCBpbnQg
b3AyLCB1bnNpZ25lZCB0YXJnZXQsIERvdWJsZUNvbmRpdGlvbiwgc2l6ZV90IChKSVRfT1BFUkFU
SU9OICpvcGVyYXRpb24pKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1
ZSksIGJvb2wgaW52ZXJ0LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQor
dGVtcGxhdGUgPHR5cGVuYW1lIE9wPgordm9pZCBKSVQ6OmVtaXRfY29tcGFyZUFuZEp1bXBTbG93
KGNvbnN0IEluc3RydWN0aW9uICppbnN0cnVjdGlvbiwgRG91YmxlQ29uZGl0aW9uLCBzaXplX3Qg
KEpJVF9PUEVSQVRJT04gKm9wZXJhdGlvbikoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIEVu
Y29kZWRKU1ZhbHVlKSwgYm9vbCBpbnZlcnQsIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCiB7CisgICAgYXV0byBieXRlY29kZSA9IGluc3RydWN0aW9uLT5hczxPcD4oKTsK
KyAgICBpbnQgb3AxID0gYnl0ZWNvZGUubGhzLm9mZnNldCgpOworICAgIGludCBvcDIgPSBieXRl
Y29kZS5yaHMub2Zmc2V0KCk7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChpbnN0
cnVjdGlvbiwgYnl0ZWNvZGUudGFyZ2V0KTsKKwogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7
CiAKICAgICBlbWl0TG9hZChvcDEsIHJlZ1QxLCByZWdUMCk7CkBAIC0xMzIsMTAgKzE1NSwxMSBA
QCB2b2lkIEpJVDo6ZW1pdF9jb21wYXJlQW5kSnVtcFNsb3coaW50IG9wMSwgaW50IG9wMiwgdW5z
aWduZWQgdGFyZ2V0LCBEb3VibGVDb25kaQogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRl
c3QzMihpbnZlcnQgPyBaZXJvIDogTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwog
fQogCi12b2lkIEpJVDo6ZW1pdF9vcF91bnNpZ25lZChJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfdW5zaWduZWQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBpbnQgcmVzdWx0ID0gY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZDsKLSAgICBpbnQgb3AxID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFVuc2ln
bmVkPigpOworICAgIGludCByZXN1bHQgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7CisgICAgaW50
IG9wMSA9IGJ5dGVjb2RlLm9wZXJhbmQub2Zmc2V0KCk7CiAgICAgCiAgICAgZW1pdExvYWQob3Ax
LCByZWdUMSwgcmVnVDApOwogICAgIApAQCAtMTQ0LDkgKzE2OCwxMCBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF91bnNpZ25lZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGVtaXRT
dG9yZUludDMyKHJlc3VsdCwgcmVnVDAsIHJlc3VsdCA9PSBvcDEpOwogfQogCi12b2lkIEpJVDo6
ZW1pdF9vcF9pbmMoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjpl
bWl0X29wX2luYyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAg
IGludCBzcmNEc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSW5jPigpOworICAgIGludCBzcmNE
c3QgPSBieXRlY29kZS5zcmNEc3Qub2Zmc2V0KCk7CiAKICAgICBlbWl0TG9hZChzcmNEc3QsIHJl
Z1QxLCByZWdUMCk7CiAKQEAgLTE1NSw5ICsxODAsMTAgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaW5j
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdFN0b3JlSW50MzIoc3Jj
RHN0LCByZWdUMCwgdHJ1ZSk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2RlYyhJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfZGVjKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaW50IHNyY0RzdCA9IGN1cnJlbnRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BEZWM+KCk7CisgICAgaW50IHNyY0RzdCA9IGJ5dGVjb2RlLnNyY0RzdC5v
ZmZzZXQoKTsKIAogICAgIGVtaXRMb2FkKHNyY0RzdCwgcmVnVDEsIHJlZ1QwKTsKIApAQCAtMTY2
LDEwICsxOTIsMTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZGVjKEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdFN0b3JlSW50MzIoc3JjRHN0LCByZWdUMCwgdHJ1ZSk7CiB9
CiAKLXZvaWQgSklUOjplbWl0QmluYXJ5RG91YmxlT3AoT3Bjb2RlSUQgb3Bjb2RlSUQsIGludCBk
c3QsIGludCBvcDEsIGludCBvcDIsIE9wZXJhbmRUeXBlcyB0eXBlcywgSnVtcExpc3QmIG5vdElu
dDMyT3AxLCBKdW1wTGlzdCYgbm90SW50MzJPcDIsIGJvb2wgb3AxSXNJblJlZ2lzdGVycywgYm9v
bCBvcDJJc0luUmVnaXN0ZXJzKQordGVtcGxhdGUgPHR5cGVuYW1lIE9wPgordm9pZCBKSVQ6OmVt
aXRCaW5hcnlEb3VibGVPcChjb25zdCBJbnN0cnVjdGlvbiAqaW5zdHJ1Y3Rpb24sIE9wZXJhbmRU
eXBlcyB0eXBlcywgSnVtcExpc3QmIG5vdEludDMyT3AxLCBKdW1wTGlzdCYgbm90SW50MzJPcDIs
IGJvb2wgb3AxSXNJblJlZ2lzdGVycywgYm9vbCBvcDJJc0luUmVnaXN0ZXJzKQogewogICAgIEp1
bXBMaXN0IGVuZDsKIAorICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8T3A+KCk7
CisgICAgaW50IG9wY29kZUlEID0gT3A6Om9wY29kZUlEOworICAgIGludCB0YXJnZXQgPSBqdW1w
VGFyZ2V0KGluc3RydWN0aW9uLCBieXRlY29kZS50YXJnZXQpOworICAgIGludCBvcDEgPSBieXRl
Y29kZS5saHMub2Zmc2V0KCk7CisgICAgaW50IG9wMiA9IGJ5dGVjb2RlLnJocy5vZmZzZXQoKTsK
KwogICAgIGlmICghbm90SW50MzJPcDEuZW1wdHkoKSkgewogICAgICAgICAvLyBEb3VibGUgY2Fz
ZSAxOiBPcDEgaXMgbm90IGludDMyOyBPcDIgaXMgdW5rbm93bi4KICAgICAgICAgbm90SW50MzJP
cDEubGluayh0aGlzKTsKQEAgLTIwMCwzNSArMjMzLDM1IEBAIHZvaWQgSklUOjplbWl0QmluYXJ5
RG91YmxlT3AoT3Bjb2RlSUQgb3Bjb2RlSUQsIGludCBkc3QsIGludCBvcDEsIGludCBvcDIsIE9w
ZXJhCiAgICAgICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKICAgICAgICAgICAgIGNhc2Ugb3Bfamxl
c3M6CiAgICAgICAgICAgICAgICAgZW1pdExvYWREb3VibGUob3AxLCBmcFJlZ1QyKTsKLSAgICAg
ICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShEb3VibGVMZXNzVGhhbiwgZnBSZWdUMiwg
ZnBSZWdUMCksIGRzdCk7CisgICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91
YmxlTGVzc1RoYW4sIGZwUmVnVDIsIGZwUmVnVDApLCB0YXJnZXQpOwogICAgICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgY2FzZSBvcF9qbGVzc2VxOgogICAgICAgICAgICAgICAgIGVt
aXRMb2FkRG91YmxlKG9wMSwgZnBSZWdUMik7Ci0gICAgICAgICAgICAgICAgYWRkSnVtcChicmFu
Y2hEb3VibGUoRG91YmxlTGVzc1RoYW5PckVxdWFsLCBmcFJlZ1QyLCBmcFJlZ1QwKSwgZHN0KTsK
KyAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShEb3VibGVMZXNzVGhhbk9yRXF1
YWwsIGZwUmVnVDIsIGZwUmVnVDApLCB0YXJnZXQpOwogICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgY2FzZSBvcF9qZ3JlYXRlcjoKICAgICAgICAgICAgICAgICBlbWl0TG9hZERv
dWJsZShvcDEsIGZwUmVnVDIpOwotICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91Ymxl
KERvdWJsZUdyZWF0ZXJUaGFuLCBmcFJlZ1QyLCBmcFJlZ1QwKSwgZHN0KTsKKyAgICAgICAgICAg
ICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShEb3VibGVHcmVhdGVyVGhhbiwgZnBSZWdUMiwgZnBS
ZWdUMCksIHRhcmdldCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNl
IG9wX2pncmVhdGVyZXE6CiAgICAgICAgICAgICAgICAgZW1pdExvYWREb3VibGUob3AxLCBmcFJl
Z1QyKTsKLSAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShEb3VibGVHcmVhdGVy
VGhhbk9yRXF1YWwsIGZwUmVnVDIsIGZwUmVnVDApLCBkc3QpOworICAgICAgICAgICAgICAgIGFk
ZEp1bXAoYnJhbmNoRG91YmxlKERvdWJsZUdyZWF0ZXJUaGFuT3JFcXVhbCwgZnBSZWdUMiwgZnBS
ZWdUMCksIHRhcmdldCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNl
IG9wX2pubGVzczoKICAgICAgICAgICAgICAgICBlbWl0TG9hZERvdWJsZShvcDEsIGZwUmVnVDIp
OwotICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKERvdWJsZUxlc3NUaGFuT3JF
cXVhbE9yVW5vcmRlcmVkLCBmcFJlZ1QwLCBmcFJlZ1QyKSwgZHN0KTsKKyAgICAgICAgICAgICAg
ICBhZGRKdW1wKGJyYW5jaERvdWJsZShEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZCwg
ZnBSZWdUMCwgZnBSZWdUMiksIHRhcmdldCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICBjYXNlIG9wX2pubGVzc2VxOgogICAgICAgICAgICAgICAgIGVtaXRMb2FkRG91Ymxl
KG9wMSwgZnBSZWdUMik7Ci0gICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91
YmxlTGVzc1RoYW5PclVub3JkZXJlZCwgZnBSZWdUMCwgZnBSZWdUMiksIGRzdCk7CisgICAgICAg
ICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlTGVzc1RoYW5PclVub3JkZXJlZCwg
ZnBSZWdUMCwgZnBSZWdUMiksIHRhcmdldCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICBjYXNlIG9wX2puZ3JlYXRlcjoKICAgICAgICAgICAgICAgICBlbWl0TG9hZERvdWJs
ZShvcDEsIGZwUmVnVDIpOwotICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKERv
dWJsZUdyZWF0ZXJUaGFuT3JFcXVhbE9yVW5vcmRlcmVkLCBmcFJlZ1QwLCBmcFJlZ1QyKSwgZHN0
KTsKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShEb3VibGVHcmVhdGVyVGhh
bk9yRXF1YWxPclVub3JkZXJlZCwgZnBSZWdUMCwgZnBSZWdUMiksIHRhcmdldCk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIG9wX2puZ3JlYXRlcmVxOgogICAgICAg
ICAgICAgICAgIGVtaXRMb2FkRG91YmxlKG9wMSwgZnBSZWdUMik7Ci0gICAgICAgICAgICAgICAg
YWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZCwgZnBSZWdU
MCwgZnBSZWdUMiksIGRzdCk7CisgICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUo
RG91YmxlR3JlYXRlclRoYW5PclVub3JkZXJlZCwgZnBSZWdUMCwgZnBSZWdUMiksIHRhcmdldCk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkBAIC0yNTcsMzUgKzI5MCwzNSBA
QCB2b2lkIEpJVDo6ZW1pdEJpbmFyeURvdWJsZU9wKE9wY29kZUlEIG9wY29kZUlELCBpbnQgZHN0
LCBpbnQgb3AxLCBpbnQgb3AyLCBPcGVyYQogICAgICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7CiAg
ICAgICAgICAgICBjYXNlIG9wX2psZXNzOgogICAgICAgICAgICAgICAgIGVtaXRMb2FkRG91Ymxl
KG9wMiwgZnBSZWdUMSk7Ci0gICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91
YmxlTGVzc1RoYW4sIGZwUmVnVDAsIGZwUmVnVDEpLCBkc3QpOworICAgICAgICAgICAgICAgIGFk
ZEp1bXAoYnJhbmNoRG91YmxlKERvdWJsZUxlc3NUaGFuLCBmcFJlZ1QwLCBmcFJlZ1QxKSwgdGFy
Z2V0KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ugb3Bfamxlc3Nl
cToKICAgICAgICAgICAgICAgICBlbWl0TG9hZERvdWJsZShvcDIsIGZwUmVnVDEpOwotICAgICAg
ICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKERvdWJsZUxlc3NUaGFuT3JFcXVhbCwgZnBS
ZWdUMCwgZnBSZWdUMSksIGRzdCk7CisgICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3Vi
bGUoRG91YmxlTGVzc1RoYW5PckVxdWFsLCBmcFJlZ1QwLCBmcFJlZ1QxKSwgdGFyZ2V0KTsKICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ugb3BfamdyZWF0ZXI6CiAgICAg
ICAgICAgICAgICAgZW1pdExvYWREb3VibGUob3AyLCBmcFJlZ1QxKTsKLSAgICAgICAgICAgICAg
ICBhZGRKdW1wKGJyYW5jaERvdWJsZShEb3VibGVHcmVhdGVyVGhhbiwgZnBSZWdUMCwgZnBSZWdU
MSksIGRzdCk7CisgICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlR3Jl
YXRlclRoYW4sIGZwUmVnVDAsIGZwUmVnVDEpLCB0YXJnZXQpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgY2FzZSBvcF9qZ3JlYXRlcmVxOgogICAgICAgICAgICAgICAgIGVt
aXRMb2FkRG91YmxlKG9wMiwgZnBSZWdUMSk7Ci0gICAgICAgICAgICAgICAgYWRkSnVtcChicmFu
Y2hEb3VibGUoRG91YmxlR3JlYXRlclRoYW5PckVxdWFsLCBmcFJlZ1QwLCBmcFJlZ1QxKSwgZHN0
KTsKKyAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERvdWJsZShEb3VibGVHcmVhdGVyVGhh
bk9yRXF1YWwsIGZwUmVnVDAsIGZwUmVnVDEpLCB0YXJnZXQpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgY2FzZSBvcF9qbmxlc3M6CiAgICAgICAgICAgICAgICAgZW1pdExv
YWREb3VibGUob3AyLCBmcFJlZ1QxKTsKLSAgICAgICAgICAgICAgICBhZGRKdW1wKGJyYW5jaERv
dWJsZShEb3VibGVMZXNzVGhhbk9yRXF1YWxPclVub3JkZXJlZCwgZnBSZWdUMSwgZnBSZWdUMCks
IGRzdCk7CisgICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hEb3VibGUoRG91YmxlTGVzc1Ro
YW5PckVxdWFsT3JVbm9yZGVyZWQsIGZwUmVnVDEsIGZwUmVnVDApLCB0YXJnZXQpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBvcF9qbmxlc3NlcToKICAgICAgICAg
ICAgICAgICBlbWl0TG9hZERvdWJsZShvcDIsIGZwUmVnVDEpOwotICAgICAgICAgICAgICAgIGFk
ZEp1bXAoYnJhbmNoRG91YmxlKERvdWJsZUxlc3NUaGFuT3JVbm9yZGVyZWQsIGZwUmVnVDEsIGZw
UmVnVDApLCBkc3QpOworICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKERvdWJs
ZUxlc3NUaGFuT3JVbm9yZGVyZWQsIGZwUmVnVDEsIGZwUmVnVDApLCB0YXJnZXQpOwogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBvcF9qbmdyZWF0ZXI6CiAgICAgICAg
ICAgICAgICAgZW1pdExvYWREb3VibGUob3AyLCBmcFJlZ1QxKTsKLSAgICAgICAgICAgICAgICBh
ZGRKdW1wKGJyYW5jaERvdWJsZShEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWxPclVub3JkZXJlZCwg
ZnBSZWdUMSwgZnBSZWdUMCksIGRzdCk7CisgICAgICAgICAgICAgICAgYWRkSnVtcChicmFuY2hE
b3VibGUoRG91YmxlR3JlYXRlclRoYW5PckVxdWFsT3JVbm9yZGVyZWQsIGZwUmVnVDEsIGZwUmVn
VDApLCB0YXJnZXQpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBv
cF9qbmdyZWF0ZXJlcToKICAgICAgICAgICAgICAgICBlbWl0TG9hZERvdWJsZShvcDIsIGZwUmVn
VDEpOwotICAgICAgICAgICAgICAgIGFkZEp1bXAoYnJhbmNoRG91YmxlKERvdWJsZUdyZWF0ZXJU
aGFuT3JVbm9yZGVyZWQsIGZwUmVnVDEsIGZwUmVnVDApLCBkc3QpOworICAgICAgICAgICAgICAg
IGFkZEp1bXAoYnJhbmNoRG91YmxlKERvdWJsZUdyZWF0ZXJUaGFuT3JVbm9yZGVyZWQsIGZwUmVn
VDEsIGZwUmVnVDApLCB0YXJnZXQpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OwpAQCAtMjk5LDEyICszMzIsMTMgQEAgdm9pZCBKSVQ6OmVtaXRCaW5hcnlEb3VibGVPcChPcGNv
ZGVJRCBvcGNvZGVJRCwgaW50IGRzdCwgaW50IG9wMSwgaW50IG9wMiwgT3BlcmEKIAogLyogLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEJFR0lOOiBPUF9NT0QgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tICovCiAKLXZvaWQgSklUOjplbWl0X29wX21vZChJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfbW9kKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAjaWYgQ1BVKFg4NikKLSAgICBpbnQgZHN0ID0g
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgb3AxID0gY3VycmVudElu
c3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICBpbnQgb3AyID0gY3VycmVudEluc3RydWN0aW9u
WzNdLnUub3BlcmFuZDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1Y3Rpb24tPmFzPE9wTW9k
PigpOworICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7CisgICAgaW50IG9wMSA9
IGJ5dGVjb2RlLmxocy5vZmZzZXQoKTsKKyAgICBpbnQgb3AyID0gYnl0ZWNvZGUucmhzLm9mZnNl
dCgpOwogCiAgICAgLy8gTWFrZSBzdXJlIHJlZ2lzdGVycyBhcmUgY29ycmVjdCBmb3IgeDg2IElE
SVYgaW5zdHJ1Y3Rpb25zLgogICAgIEFTU0VSVChyZWdUMCA9PSBYODZSZWdpc3RlcnM6OmVheCk7
CkBAIC0zMzMsNyArMzY3LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfbW9kKEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiAjZW5kaWYKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX21v
ZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46
Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX21vZChjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQogewogI2lmIENQVShYODYpCiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbDMyXzY0LmNwcAppbmRleCBhZWZhZWNjYTc1
NjAxNDNlMjQ0ZGQzODkyOGY5MDg5Mjk5NTdjNjc1Li4wOWM0ZDAzOTU1N2ZiNmM0ZTUzYTJlNjEx
MzE3ZjdlMzA5YWQ3NGI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VENhbGwzMl82NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJf
NjQuY3BwCkBAIC00NSwxOCArNDUsMTkgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXZvaWQgSklU
OjplbWl0UHV0Q2FsbFJlc3VsdChJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCit0ZW1wbGF0ZTx0
eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3VsdChjb25zdCBPcCYgYnl0ZWNv
ZGUpCiB7Ci0gICAgaW50IGRzdCA9IGluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBlbWl0
VmFsdWVQcm9maWxpbmdTaXRlKCk7Ci0gICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsK
KyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2Nr
KSk7CisgICAgZW1pdFN0b3JlKGJ5dGVjb2RlLmRzdC5vZmZzZXQoKSwgcmVnVDEsIHJlZ1QwKTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfcmV0KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCit2b2lkIEpJVDo6ZW1pdF9vcF9yZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKLSAgICB1bnNpZ25lZCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUmV0
PigpOworICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLnZhbHVlLm9mZnNldCgpOwogCi0gICAgZW1p
dExvYWQoZHN0LCByZWdUMSwgcmVnVDApOworICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMSwgcmVn
VDApOwogCiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKICAgICBlbWl0UmVzdG9y
ZUNhbGxlZVNhdmVzKCk7CkBAIC02NCw5NiArNjUsMTI1IEBAIHZvaWQgSklUOjplbWl0X29wX3Jl
dChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIHJldCgpOwogfQogCi12b2lk
IEpJVDo6ZW1pdFNsb3dfb3BfY2FsbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2NhbGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nh
c2Uob3BfY2FsbCwgY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4
KyspOworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZTxPcENhbGw+KGN1cnJlbnRJbnN0cnVjdGlv
biwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX3RhaWxfY2FsbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxf
Y2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZShv
cF90YWlsX2NhbGwsIGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRl
eCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbD4oY3VycmVudEluc3Ry
dWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfY2FsbF9ldmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Y2FsbF9ldmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dD
YXNlKG9wX2NhbGxfZXZhbCwgY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5m
b0luZGV4KTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDYWxsRXZhbD4oY3VycmVudElu
c3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KTsKIH0KICAKLXZvaWQgSklUOjpl
bWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKLSAgICBjb21waWxlT3BD
YWxsU2xvd0Nhc2Uob3BfY2FsbF92YXJhcmdzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1f
Y2FsbExpbmtJbmZvSW5kZXgrKyk7CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ2FsbFZh
cmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF92YXJhcmdzKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0
ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKIHsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2Uob3BfdGFpbF9jYWxsX3ZhcmFy
Z3MsIGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAg
ICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVj
dGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRT
bG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBK
SVQ6OmVtaXRTbG93X29wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cyhjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQogewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZShvcF90YWlsX2NhbGxfZm9yd2Fy
ZF9hcmd1bWVudHMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRl
eCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BUYWlsQ2FsbEZvcndhcmRBcmd1bWVu
dHM+KGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0K
ICAgICAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3RfdmFyYXJncyhJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NvbnN0cnVjdF92YXJhcmdzKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCiB7Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlKG9wX2NvbnN0cnVjdF92YXJh
cmdzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Cisg
ICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlPE9wQ29uc3RydWN0VmFyYXJncz4oY3VycmVudEluc3Ry
dWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogICAgIAotdm9pZCBKSVQ6
OmVtaXRTbG93X29wX2NvbnN0cnVjdChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93
X29wX2NvbnN0cnVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGNvbXBpbGVPcENhbGxT
bG93Q2FzZShvcF9jb25zdHJ1Y3QsIGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlu
a0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2U8T3BDb25zdHJ1Y3Q+KGN1
cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRfb3BfY2FsbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9p
ZCBKSVQ6OmVtaXRfb3BfY2FsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewotICAgIGNvbXBpbGVPcENhbGwob3BfY2FsbCwgY3VycmVudEluc3RydWN0aW9uLCBtX2Nh
bGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGw8T3BDYWxsPihjdXJyZW50SW5z
dHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29w
X3RhaWxfY2FsbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVt
aXRfb3BfdGFpbF9jYWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
Ci0gICAgY29tcGlsZU9wQ2FsbChvcF90YWlsX2NhbGwsIGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9j
YWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsPE9wVGFpbENhbGw+KGN1cnJl
bnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRfb3BfY2FsbF9ldmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJ
VDo6ZW1pdF9vcF9jYWxsX2V2YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKLSAgICBjb21waWxlT3BDYWxsKG9wX2NhbGxfZXZhbCwgY3VycmVudEluc3RydWN0aW9u
LCBtX2NhbGxMaW5rSW5mb0luZGV4KTsKKyAgICBjb21waWxlT3BDYWxsPE9wQ2FsbEV2YWw+KGN1
cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0X29wX2NhbGxfdmFyYXJncyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9p
ZCBKSVQ6OmVtaXRfb3BfY2FsbF92YXJhcmdzKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7Ci0gICAgY29tcGlsZU9wQ2FsbChvcF9jYWxsX3ZhcmFyZ3MsIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsPE9w
Q2FsbFZhcmFyZ3M+KGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfdGFpbF9jYWxsX3ZhcmFyZ3MoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX3RhaWxfY2FsbF92YXJhcmdzKGNv
bnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgY29tcGlsZU9wQ2Fs
bChvcF90YWlsX2NhbGxfdmFyYXJncywgY3VycmVudEluc3RydWN0aW9uLCBtX2NhbGxMaW5rSW5m
b0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGw8T3BUYWlsQ2FsbFZhcmFyZ3M+KGN1cnJlbnRJ
bnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRf
b3BfdGFpbF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBjb21waWxlT3BDYWxs
KG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cywgY3VycmVudEluc3RydWN0aW9uLCBtX2Nh
bGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGw8T3BUYWlsQ2FsbEZvcndhcmRB
cmd1bWVudHM+KGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0K
ICAgICAKLXZvaWQgSklUOjplbWl0X29wX2NvbnN0cnVjdF92YXJhcmdzKEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9jb25zdHJ1Y3RfdmFyYXJncyhj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGNvbXBpbGVPcENh
bGwob3BfY29uc3RydWN0X3ZhcmFyZ3MsIGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0lu
Zm9JbmRleCsrKTsKKyAgICBjb21waWxlT3BDYWxsPE9wQ29uc3RydWN0VmFyYXJncz4oY3VycmVu
dEluc3RydWN0aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwogfQogICAgIAotdm9pZCBKSVQ6
OmVtaXRfb3BfY29uc3RydWN0KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lk
IEpJVDo6ZW1pdF9vcF9jb25zdHJ1Y3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKLSAgICBjb21waWxlT3BDYWxsKG9wX2NvbnN0cnVjdCwgY3VycmVudEluc3RydWN0
aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworICAgIGNvbXBpbGVPcENhbGw8T3BDb25zdHJ1
Y3Q+KGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKIH0KIAotdm9p
ZCBKSVQ6OmNvbXBpbGVTZXR1cFZhcmFyZ3NGcmFtZShPcGNvZGVJRCBvcGNvZGUsIEluc3RydWN0
aW9uKiBpbnN0cnVjdGlvbiwgQ2FsbExpbmtJbmZvKiBpbmZvKQordGVtcGxhdGUgPHR5cGVuYW1l
IE9wPgorc3RkOjplbmFibGVfaWZfdDwKKyAgICBPcDo6b3Bjb2RlSUQgIT0gb3BfY2FsbF92YXJh
cmdzICYmIE9wOjpvcGNvZGVJRCAhPSBvcF9jb25zdHJ1Y3RfdmFyYXJncworICAgICYmIE9wOjpv
cGNvZGVJRCAhPSBvcF90YWlsX2NhbGxfdmFyYXJncyAmJiBPcDo6b3Bjb2RlSUQgIT0gb3BfdGFp
bF9jYWxsX2ZvcndhcmRfYXJndW1lbnRzCissIHZvaWQ+CitKSVQ6OmNvbXBpbGVTZXR1cEZyYW1l
KGNvbnN0IE9wJiBieXRlY29kZSwgQ2FsbExpbmtJbmZvKikKIHsKLSAgICBpbnQgdGhpc1ZhbHVl
ID0gaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgIGludCBhcmd1bWVudHMgPSBpbnN0cnVj
dGlvbls0XS51Lm9wZXJhbmQ7Ci0gICAgaW50IGZpcnN0RnJlZVJlZ2lzdGVyID0gaW5zdHJ1Y3Rp
b25bNV0udS5vcGVyYW5kOwotICAgIGludCBmaXJzdFZhckFyZ09mZnNldCA9IGluc3RydWN0aW9u
WzZdLnUub3BlcmFuZDsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKKyAgICBpbnQgYXJnQ291bnQgPSBieXRlY29kZS5hcmdjOworICAgIGludCBy
ZWdpc3Rlck9mZnNldCA9IC1zdGF0aWNfY2FzdDxpbnQ+KGJ5dGVjb2RlLmFyZ3YpOworCisgICAg
aWYgKE9wOjpvcGNvZGVJRCA9PSBvcF9jYWxsICYmIHNob3VsZEVtaXRQcm9maWxpbmcoKSkgewor
ICAgICAgICBlbWl0TG9hZChyZWdpc3Rlck9mZnNldCArIENhbGxGcmFtZTo6YXJndW1lbnRPZmZz
ZXRJbmNsdWRpbmdUaGlzKDApLCByZWdUMCwgcmVnVDEpOworICAgICAgICBKdW1wIGRvbmUgPSBi
cmFuY2hJZk5vdENlbGwocmVnVDApOworICAgICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMSwgSlND
ZWxsOjpzdHJ1Y3R1cmVJRE9mZnNldCgpKSwgcmVnVDEpOworICAgICAgICBzdG9yZTMyKHJlZ1Qx
LCBtZXRhZGF0YS5hcnJheVByb2ZpbGUuYWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmVJRCgpKTsK
KyAgICAgICAgZG9uZS5saW5rKHRoaXMpOworICAgIH0KKworICAgIGFkZFB0cihUcnVzdGVkSW1t
MzIocmVnaXN0ZXJPZmZzZXQgKiBzaXplb2YoUmVnaXN0ZXIpICsgc2l6ZW9mKENhbGxlckZyYW1l
QW5kUEMpKSwgY2FsbEZyYW1lUmVnaXN0ZXIsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICBz
dG9yZTMyKFRydXN0ZWRJbW0zMihhcmdDb3VudCksIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0
ZXIsIENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVv
ZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNldCAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkp
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KK3N0ZDo6ZW5hYmxlX2lmX3Q8CisgICAgT3A6
Om9wY29kZUlEID09IG9wX2NhbGxfdmFyYXJncyB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfY29uc3Ry
dWN0X3ZhcmFyZ3MKKyAgICB8fCBPcDo6b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3Mg
fHwgT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cworLCB2b2lk
PgorSklUOjpjb21waWxlU2V0dXBGcmFtZShjb25zdCBPcCYgYnl0ZWNvZGUsIENhbGxMaW5rSW5m
byogaW5mbykKK3sKKyAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKKyAgICBp
bnQgdGhpc1ZhbHVlID0gYnl0ZWNvZGUudGhpc1ZhbHVlLm9mZnNldCgpOworICAgIGludCBhcmd1
bWVudHMgPSBieXRlY29kZS5hcmd1bWVudHMub2Zmc2V0KCk7CisgICAgaW50IGZpcnN0RnJlZVJl
Z2lzdGVyID0gYnl0ZWNvZGUuZmlyc3RGcmVlLm9mZnNldCgpOworICAgIGludCBmaXJzdFZhckFy
Z09mZnNldCA9IGJ5dGVjb2RlLmZpcnN0VmFyQXJnOwogCiAgICAgZW1pdExvYWQoYXJndW1lbnRz
LCByZWdUMSwgcmVnVDApOwogICAgIFpfSklUT3BlcmF0aW9uX0VKWlogc2l6ZU9wZXJhdGlvbjsK
LSAgICBpZiAob3Bjb2RlID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKKyAgICBp
ZiAoT3A6Om9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAg
ICAgc2l6ZU9wZXJhdGlvbiA9IG9wZXJhdGlvblNpemVGcmFtZUZvckZvcndhcmRBcmd1bWVudHM7
CiAgICAgZWxzZQogICAgICAgICBzaXplT3BlcmF0aW9uID0gb3BlcmF0aW9uU2l6ZUZyYW1lRm9y
VmFyYXJnczsKQEAgLTE2Myw3ICsxOTMsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZVNldHVwVmFyYXJn
c0ZyYW1lKE9wY29kZUlEIG9wY29kZSwgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBDYQogICAg
IGFkZFB0cihUcnVzdGVkSW1tMzIoLShzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykgKyBXVEY6OnJv
dW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRCeXRlcygpLCA2ICogc2l6ZW9mKHZvaWQq
KSkpKSwgcmVnVDEsIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKICAgICBlbWl0TG9hZChhcmd1bWVu
dHMsIHJlZ1QyLCByZWdUNCk7CiAgICAgRl9KSVRPcGVyYXRpb25fRUZKWlogc2V0dXBPcGVyYXRp
b247Ci0gICAgaWYgKG9wY29kZSA9PSBvcF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCisg
ICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKICAgICAg
ICAgc2V0dXBPcGVyYXRpb24gPSBvcGVyYXRpb25TZXR1cEZvcndhcmRBcmd1bWVudHNGcmFtZTsK
ICAgICBlbHNlCiAgICAgICAgIHNldHVwT3BlcmF0aW9uID0gb3BlcmF0aW9uU2V0dXBWYXJhcmdz
RnJhbWU7CkBAIC0xODUsNyArMjE1LDE0IEBAIHZvaWQgSklUOjpjb21waWxlU2V0dXBWYXJhcmdz
RnJhbWUoT3Bjb2RlSUQgb3Bjb2RlLCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIENhCiAgICAg
YWRkUHRyKFRydXN0ZWRJbW0zMihzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpLCByZWdUMSwgc3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpOwogfQogCi12b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsKEluc3Ry
dWN0aW9uKiBpbnN0cnVjdGlvbikKK3RlbXBsYXRlPHR5cGVuYW1lIE9wPgorYm9vbCBKSVQ6OmNv
bXBpbGVDYWxsRXZhbChjb25zdCBPcCYpCit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit0ZW1w
bGF0ZTw+Citib29sIEpJVDo6Y29tcGlsZUNhbGxFdmFsKGNvbnN0IE9wQ2FsbEV2YWwmIGJ5dGVj
b2RlKQogewogICAgIGFkZFB0cihUcnVzdGVkSW1tMzIoLXN0YXRpY19jYXN0PHB0cmRpZmZfdD4o
c2l6ZW9mKENhbGxlckZyYW1lQW5kUEMpKSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyLCByZWdUMSk7
CiAgICAgc3RvcmVQdHIoY2FsbEZyYW1lUmVnaXN0ZXIsIEFkZHJlc3MocmVnVDEsIENhbGxGcmFt
ZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOwpAQCAtMTk4LDE4ICsyMzUsMjEgQEAgdm9pZCBKSVQ6
OmNvbXBpbGVDYWxsRXZhbChJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiAKICAgICBzYW1wbGVD
b2RlQmxvY2sobV9jb2RlQmxvY2spOwogICAgIAotICAgIGVtaXRQdXRDYWxsUmVzdWx0KGluc3Ry
dWN0aW9uKTsKKyAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRlY29kZSk7CisKKyAgICByZXR1cm4g
dHJ1ZTsKIH0KIAotdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKEluc3RydWN0aW9u
KiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShjb25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgbGlu
a0FsbFNsb3dDYXNlcyhpdGVyKTsKIAorICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+
YXM8T3BDYWxsRXZhbD4oKTsKICAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2NvZGVCbG9jay0+
YWRkQ2FsbExpbmtJbmZvKCk7CiAgICAgaW5mby0+c2V0VXBDYWxsKENhbGxMaW5rSW5mbzo6Q2Fs
bCwgQ29kZU9yaWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwgcmVnVDApOwogCi0gICAgaW50IHJlZ2lz
dGVyT2Zmc2V0ID0gLWluc3RydWN0aW9uWzRdLnUub3BlcmFuZDsKLSAgICBpbnQgY2FsbGVlID0g
aW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGludCByZWdpc3Rlck9mZnNldCA9IC1ieXRl
Y29kZS5hcmd2OworICAgIGludCBjYWxsZWUgPSBieXRlY29kZS5jYWxsZWUub2Zmc2V0KCk7CiAK
ICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHJlZ2lzdGVyT2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVy
KSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7CiAKQEAgLTIyMCwxMiArMjYwLDE1IEBAIHZvaWQgSklUOjpjb21waWxl
Q2FsbEV2YWxTbG93Q2FzZShJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2Fz
ZUVudHJ5CiAKICAgICBzYW1wbGVDb2RlQmxvY2sobV9jb2RlQmxvY2spOwogICAgIAotICAgIGVt
aXRQdXRDYWxsUmVzdWx0KGluc3RydWN0aW9uKTsKKyAgICBlbWl0UHV0Q2FsbFJlc3VsdChieXRl
Y29kZSk7CiB9CiAKLXZvaWQgSklUOjpjb21waWxlT3BDYWxsKE9wY29kZUlEIG9wY29kZUlELCBJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQordGVt
cGxhdGUgPHR5cGVuYW1lIE9wPgordm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoY29uc3QgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKIHsKLSAgICBp
bnQgY2FsbGVlID0gaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIE9wY29kZUlEIG9wY29k
ZUlEID0gT3A6Om9wY29kZUlEOworICAgIGF1dG8gYnl0ZWNvZGUgPSBpbnN0cnVjdGlvbi0+YXM8
T3A+KCk7CisgICAgaW50IGNhbGxlZSA9IGJ5dGVjb2RlLmNhbGxlZS5vZmZzZXQoKTsKIAogICAg
IC8qIENhbGxlciBhbHdheXM6CiAgICAgICAgIC0gVXBkYXRlcyBjYWxsRnJhbWVSZWdpc3RlciB0
byBjYWxsZWUgY2FsbEZyYW1lLgpAQCAtMjQyLDI0ICsyODUsOCBAQCB2b2lkIEpJVDo6Y29tcGls
ZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJRCwgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCB1bnNp
Z25lZCBjYQogICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG51bGxwdHI7CiAgICAgaWYgKG9wY29k
ZUlEICE9IG9wX2NhbGxfZXZhbCkKICAgICAgICAgaW5mbyA9IG1fY29kZUJsb2NrLT5hZGRDYWxs
TGlua0luZm8oKTsKLSAgICBpZiAob3Bjb2RlSUQgPT0gb3BfY2FsbF92YXJhcmdzIHx8IG9wY29k
ZUlEID09IG9wX2NvbnN0cnVjdF92YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF92
YXJhcmdzIHx8IG9wY29kZUlEID09IG9wX3RhaWxfY2FsbF9mb3J3YXJkX2FyZ3VtZW50cykKLSAg
ICAgICAgY29tcGlsZVNldHVwVmFyYXJnc0ZyYW1lKG9wY29kZUlELCBpbnN0cnVjdGlvbiwgaW5m
byk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIGludCBhcmdDb3VudCA9IGluc3RydWN0aW9uWzNdLnUu
b3BlcmFuZDsKLSAgICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gLWluc3RydWN0aW9uWzRdLnUu
b3BlcmFuZDsKLSAgICAgICAgCi0gICAgICAgIGlmIChvcGNvZGVJRCA9PSBvcF9jYWxsICYmIHNo
b3VsZEVtaXRQcm9maWxpbmcoKSkgewotICAgICAgICAgICAgZW1pdExvYWQocmVnaXN0ZXJPZmZz
ZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcygwKSwgcmVnVDAsIHJl
Z1QxKTsKLSAgICAgICAgICAgIEp1bXAgZG9uZSA9IGJyYW5jaElmTm90Q2VsbChyZWdUMCk7Ci0g
ICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDEsIEpTQ2VsbDo6c3RydWN0dXJlSURPZmZz
ZXQoKSksIHJlZ1QxKTsKLSAgICAgICAgICAgIHN0b3JlUHRyKHJlZ1QxLCBhcnJheVByb2ZpbGVG
b3I8T3BDYWxsU2hhcGU+KGluc3RydWN0aW9uKS0+YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmVJ
RCgpKTsKLSAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKLSAgICAgICAgfQotICAgIAotICAg
ICAgICBhZGRQdHIoVHJ1c3RlZEltbTMyKHJlZ2lzdGVyT2Zmc2V0ICogc2l6ZW9mKFJlZ2lzdGVy
KSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSksIGNhbGxGcmFtZVJlZ2lzdGVyLCBzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7Ci0KLSAgICAgICAgc3RvcmUzMihUcnVzdGVkSW1tMzIoYXJnQ291bnQp
LCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojphcmd1bWVudENv
dW50ICogc3RhdGljX2Nhc3Q8aW50PihzaXplb2YoUmVnaXN0ZXIpKSArIFBheWxvYWRPZmZzZXQg
LSBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQykpKTsKLSAgICB9IC8vIFNQIGhvbGRzIG5ld0NhbGxG
cmFtZSArIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSwgd2l0aCBBcmd1bWVudENvdW50IGluaXRp
YWxpemVkLgorICAgIGNvbXBpbGVTZXR1cEZyYW1lKGJ5dGVjb2RlLCBpbmZvKTsKKyAgICAvLyBT
UCBob2xkcyBuZXdDYWxsRnJhbWUgKyBzaXplb2YoQ2FsbGVyRnJhbWVBbmRQQyksIHdpdGggQXJn
dW1lbnRDb3VudCBpbml0aWFsaXplZC4KICAgICAKICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMg
PSBDYWxsU2l0ZUluZGV4KGluc3RydWN0aW9uKS5iaXRzKCk7CiAgICAgc3RvcmUzMihUcnVzdGVk
SW1tMzIobG9jYXRpb25CaXRzKSwgdGFnRm9yKENhbGxGcmFtZVNsb3Q6OmFyZ3VtZW50Q291bnQp
KTsKQEAgLTI2OCwxMCArMjk1LDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoT3Bjb2RlSUQg
b3Bjb2RlSUQsIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgdW5zaWduZWQgY2EKICAgICBzdG9y
ZTMyKHJlZ1QwLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBDYWxsRnJhbWVTbG90Ojpj
YWxsZWUgKiBzdGF0aWNfY2FzdDxpbnQ+KHNpemVvZihSZWdpc3RlcikpICsgUGF5bG9hZE9mZnNl
dCAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSkpOwogICAgIHN0b3JlMzIocmVnVDEsIEFkZHJl
c3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIENhbGxGcmFtZVNsb3Q6OmNhbGxlZSAqIHN0YXRpY19j
YXN0PGludD4oc2l6ZW9mKFJlZ2lzdGVyKSkgKyBUYWdPZmZzZXQgLSBzaXplb2YoQ2FsbGVyRnJh
bWVBbmRQQykpKTsKIAotICAgIGlmIChvcGNvZGVJRCA9PSBvcF9jYWxsX2V2YWwpIHsKLSAgICAg
ICAgY29tcGlsZUNhbGxFdmFsKGluc3RydWN0aW9uKTsKKyAgICBpZiAoY29tcGlsZUNhbGxFdmFs
KGJ5dGVjb2RlKSkKICAgICAgICAgcmV0dXJuOwotICAgIH0KIAogICAgIGlmIChvcGNvZGVJRCA9
PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MpCiAgICAg
ICAgIGVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKQEAgLTMwMiwxMSArMzI3LDE0IEBAIHZvaWQg
SklUOjpjb21waWxlT3BDYWxsKE9wY29kZUlEIG9wY29kZUlELCBJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb24sIHVuc2lnbmVkIGNhCiAgICAgY2hlY2tTdGFja1BvaW50ZXJBbGlnbm1lbnQoKTsKIAog
ICAgIHNhbXBsZUNvZGVCbG9jayhtX2NvZGVCbG9jayk7Ci0gICAgZW1pdFB1dENhbGxSZXN1bHQo
aW5zdHJ1Y3Rpb24pOworICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKIH0KIAotdm9p
ZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShPcGNvZGVJRCBvcGNvZGVJRCwgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCB1
bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQg
SklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCB1bnNpZ25lZCBjYWxsTGlu
a0luZm9JbmRleCkKIHsKKyAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IE9wOjpvcGNvZGVJRDsKKwog
ICAgIGlmIChvcGNvZGVJRCA9PSBvcF9jYWxsX2V2YWwpIHsKICAgICAgICAgY29tcGlsZUNhbGxF
dmFsU2xvd0Nhc2UoaW5zdHJ1Y3Rpb24sIGl0ZXIpOwogICAgICAgICByZXR1cm47CkBAIC0zMTYs
NyArMzQ0LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShPcGNvZGVJRCBvcGNv
ZGVJRCwgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWMKIAogICAgIG1vdmUoVHJ1c3RlZElt
bVB0cihtX2NhbGxDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxMaW5rSW5m
byksIHJlZ1QyKTsKIAotICAgIGlmIChvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGwgfHwgb3Bjb2Rl
SUQgPT0gb3BfdGFpbF9jYWxsX3ZhcmFyZ3MpCisgICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxf
Y2FsbCB8fCBvcGNvZGVJRCA9PSBvcF90YWlsX2NhbGxfdmFyYXJncyB8fCBvcGNvZGVJRCA9PSBv
cF90YWlsX2NhbGxfZm9yd2FyZF9hcmd1bWVudHMpCiAgICAgICAgIGVtaXRSZXN0b3JlQ2FsbGVl
U2F2ZXMoKTsKIAogICAgIG1fY2FsbENvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0u
Y2FsbFJldHVybkxvY2F0aW9uID0gZW1pdE5ha2VkQ2FsbChtX3ZtLT5nZXRDVElTdHViKGxpbmtD
YWxsVGh1bmtHZW5lcmF0b3IpLnJldGFnZ2VkQ29kZTxOb1B0clRhZz4oKSk7CkBAIC0zMzAsNyAr
MzU4LDkgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShPcGNvZGVJRCBvcGNvZGVJ
RCwgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWMKICAgICBjaGVja1N0YWNrUG9pbnRlckFs
aWdubWVudCgpOwogCiAgICAgc2FtcGxlQ29kZUJsb2NrKG1fY29kZUJsb2NrKTsKLSAgICBlbWl0
UHV0Q2FsbFJlc3VsdChpbnN0cnVjdGlvbik7CisKKyAgICBhdXRvIGJ5dGVjb2RlID0gaW5zdHJ1
Y3Rpb24tPmFzPE9wPigpOworICAgIGVtaXRQdXRDYWxsUmVzdWx0KGJ5dGVjb2RlKTsKIH0KIAog
fSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVElubGluZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCmlu
ZGV4IDY4OTc3MDllYTkxZjAyYjVhNTI1MDJjYjk1YTgxZjZhYjI0ZjllMTEuLmQ2YzdiN2ZhNzg4
Y2MzNjgyNzhjZWRjNjEzNDdlYWQ2ZDMwMWIxMjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUSW5saW5lcy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUSW5saW5lcy5oCkBAIC0yNiw3ICsyNiw2IEBACiAjcHJhZ21hIG9uY2UKIAogI2lmIEVOQUJM
RShKSVQpCi0KICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAt
MTMxLDcgKzEzMCw3IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnVwZGF0ZVRvcENhbGxGcmFt
ZSgpCiB7CiAgICAgQVNTRVJUKHN0YXRpY19jYXN0PGludD4obV9ieXRlY29kZU9mZnNldCkgPj0g
MCk7CiAjaWYgVVNFKEpTVkFMVUUzMl82NCkKLSAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24g
PSAmbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpW21fYnl0ZWNvZGVPZmZzZXRdOyAKKyAgICBj
b25zdCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
KCkuYXQobV9ieXRlY29kZU9mZnNldCkucHRyKCk7CiAgICAgdWludDMyX3QgbG9jYXRpb25CaXRz
ID0gQ2FsbFNpdGVJbmRleChpbnN0cnVjdGlvbikuYml0cygpOwogI2Vsc2UKICAgICB1aW50MzJf
dCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KG1fYnl0ZWNvZGVPZmZzZXQpLmJpdHMoKTsK
QEAgLTcwNiw2ICs3MDUsOCBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbWl0SnVtcFNsb3dD
YXNlSWZOb3ROdW1iZXIoUmVnaXN0ZXJJRCByZWcpCiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZO
b3ROdW1iZXIocmVnKSk7CiB9CiAKKyNlbmRpZiAvLyBVU0UoSlNWQUxVRTMyXzY0KQorCiBBTFdB
WVNfSU5MSU5FIGludCBKSVQ6Omp1bXBUYXJnZXQoY29uc3QgSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uLCBpbnQgdGFyZ2V0KQogewogICAgIGlmICh0YXJnZXQpCkBAIC03MzYsOCArNzM3LDYgQEAg
QUxXQVlTX0lOTElORSBBcml0aFByb2ZpbGUgSklUOjpjb3BpZWRBcml0aFByb2ZpbGUoQmluYXJ5
T3AgYnl0ZWNvZGUpCiAgICAgcmV0dXJuIGFyaXRoUHJvZmlsZTsKIH0KIAotI2VuZGlmIC8vIFVT
RShKU1ZBTFVFMzJfNjQpCi0KIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gRU5BQkxF
KEpJVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCmluZGV4IGY0Mjcw
YmU4YzVhNDFhNjgyNDExZGI1NDBmYzQ0ZDdiMzE5MjcwMmYuLjgwMWE2YTgyMjE1MjdkOGE4MmYy
ZTM1MWVjMTgxODM5NWQ3MzY2MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2Rlcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNv
ZGVzLmNwcApAQCAtMTAxNiw2ICsxMDE2LDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2xvb3Bf
aGludChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2wKICAg
ICAgICAgZW1pdEp1bXBTbG93VG9Ib3QoanVtcCgpLCBjdXJyZW50SW5zdHJ1Y3Rpb24tPnNpemUo
KSk7CiAgICAgfQogI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oY3VycmVudEluc3RydWN0aW9uKTsK
ICAgICBVTlVTRURfUEFSQU0oaXRlcik7CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3Bjb2RlczMyXzY0LmNwcAppbmRleCBlZjAzMTAyZWM2MTA5NmY5MmY2NTcx
NjA0NjZhNmVjYzc5MjU3YmFkLi44N2MxZmEwNzI5ZTEwYTJiOGRlZTRhNTU3MzJhZDQwYTQ0NjQx
OGFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMzMl82
NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzMzJfNjQuY3Bw
CkBAIC00NywxMCArNDcsMTEgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXZvaWQgSklUOjplbWl0
X29wX21vdihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRf
b3BfbW92KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaW50
IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHNyYyA9IGN1
cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BNb3Y+KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5v
ZmZzZXQoKTsKKyAgICBpbnQgc3JjID0gYnl0ZWNvZGUuc3JjLm9mZnNldCgpOwogICAgIAogICAg
IGlmIChtX2NvZGVCbG9jay0+aXNDb25zdGFudFJlZ2lzdGVySW5kZXgoc3JjKSkKICAgICAgICAg
ZW1pdFN0b3JlKGRzdCwgZ2V0Q29uc3RhbnRPcGVyYW5kKHNyYykpOwpAQCAtNjAsMjQgKzYxLDI4
IEBAIHZvaWQgSklUOjplbWl0X29wX21vdihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfZW5kKEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9lbmQoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBBU1NFUlQocmV0dXJuVmFsdWVHUFIgIT0gY2FsbEZy
YW1lUmVnaXN0ZXIpOwotICAgIGVtaXRMb2FkKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQsIHJlZ1QxLCByZXR1cm5WYWx1ZUdQUik7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BFbmQ+KCk7CisgICAgZW1pdExvYWQoYnl0ZWNvZGUudmFsdWUub2Zm
c2V0KCksIHJlZ1QxLCByZXR1cm5WYWx1ZUdQUik7CiAgICAgZW1pdFJlc3RvcmVDYWxsZWVTYXZl
cygpOwogICAgIGVtaXRGdW5jdGlvbkVwaWxvZ3VlKCk7CiAgICAgcmV0KCk7CiB9CiAKLXZvaWQg
SklUOjplbWl0X29wX2ptcChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBK
SVQ6OmVtaXRfb3Bfam1wKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7
Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsK
KyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEptcD4oKTsKKyAg
ICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNv
ZGUudGFyZ2V0KTsKICAgICBhZGRKdW1wKGp1bXAoKSwgdGFyZ2V0KTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRfb3BfbmV3X29iamVjdChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9p
ZCBKSVQ6OmVtaXRfb3BfbmV3X29iamVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewotICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gY3VycmVudEluc3RydWN0aW9u
WzNdLnUub2JqZWN0QWxsb2NhdGlvblByb2ZpbGUtPnN0cnVjdHVyZSgpOworICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOworICAgIGF1dG8m
IG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gbWV0YWRhdGEub2JqZWN0QWxsb2NhdGlvblByb2ZpbGUuc3RydWN0dXJl
KCk7CiAgICAgc2l6ZV90IGFsbG9jYXRpb25TaXplID0gSlNGaW5hbE9iamVjdDo6YWxsb2NhdGlv
blNpemUoc3RydWN0dXJlLT5pbmxpbmVDYXBhY2l0eSgpKTsKICAgICBBbGxvY2F0b3IgYWxsb2Nh
dG9yID0gc3Vic3BhY2VGb3I8SlNGaW5hbE9iamVjdD4oKm1fdm0pLT5hbGxvY2F0b3JGb3JOb25W
aXJ0dWFsKGFsbG9jYXRpb25TaXplLCBBbGxvY2F0b3JGb3JNb2RlOjpBbGxvY2F0b3JJZkV4aXN0
cyk7CiAKQEAgLTkzLDI2ICs5OCwyOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9uZXdfb2JqZWN0KElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgICAgIGVtaXRBbGxvY2F0ZUpTT2Jq
ZWN0KHJlc3VsdFJlZywgSklUQWxsb2NhdG9yOjpjb25zdGFudChhbGxvY2F0b3IpLCBhbGxvY2F0
b3JSZWcsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgYnV0dGVyZmx5LCBzY3JhdGNoUmVnLCBz
bG93Q2FzZXMpOwogICAgICAgICBlbWl0SW5pdGlhbGl6ZUlubGluZVN0b3JhZ2UocmVzdWx0UmVn
LCBzdHJ1Y3R1cmUtPmlubGluZUNhcGFjaXR5KCkpOwogICAgICAgICBhZGRTbG93Q2FzZShzbG93
Q2FzZXMpOwotICAgICAgICBlbWl0U3RvcmVDZWxsKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQsIHJlc3VsdFJlZyk7CisgICAgICAgIGVtaXRTdG9yZUNlbGwoYnl0ZWNvZGUuZHN0Lm9m
ZnNldCgpLCByZXN1bHRSZWcpOwogICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX25l
d19vYmplY3QoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9uZXdfb2JqZWN0
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAot
ICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub2JqZWN0QWxsb2NhdGlv
blByb2ZpbGUtPnN0cnVjdHVyZSgpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wTmV3T2JqZWN0PigpOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUu
bWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0
KCk7CisgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBtZXRhZGF0YS5vYmplY3RBbGxvY2F0aW9u
UHJvZmlsZS5zdHJ1Y3R1cmUoKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbk5ld09iamVj
dCwgc3RydWN0dXJlKTsKICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwog
fQogCi12b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2lu
c3RhbmNlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgYXV0
byYgYnl0ZWNvZGUgPSAqcmVpbnRlcnByZXRfY2FzdDxPcE92ZXJyaWRlc0hhc0luc3RhbmNlKj4o
Y3VycmVudEluc3RydWN0aW9uKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0KCk7Ci0gICAg
aW50IGNvbnN0cnVjdG9yID0gYnl0ZWNvZGUuY29uc3RydWN0b3IoKTsKLSAgICBpbnQgaGFzSW5z
dGFuY2VWYWx1ZSA9IGJ5dGVjb2RlLmhhc0luc3RhbmNlVmFsdWUoKTsKKyAgICBhdXRvIGJ5dGVj
b2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcE92ZXJyaWRlc0hhc0luc3RhbmNlPigpOwor
ICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7CisgICAgaW50IGNvbnN0cnVjdG9y
ID0gYnl0ZWNvZGUuY29uc3RydWN0b3Iub2Zmc2V0KCk7CisgICAgaW50IGhhc0luc3RhbmNlVmFs
dWUgPSBieXRlY29kZS5oYXNJbnN0YW5jZVZhbHVlLm9mZnNldCgpOwogCiAgICAgZW1pdExvYWRQ
YXlsb2FkKGhhc0luc3RhbmNlVmFsdWUsIHJlZ1QwKTsKICAgICAvLyBXZSBkb24ndCBqdW1wIGlm
IHdlIGtub3cgd2hhdCBTeW1ib2wuaGFzSW5zdGFuY2Ugd291bGQgZG8uCkBAIC0xMzUsMTIgKzE0
MiwxMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9vdmVycmlkZXNfaGFzX2luc3RhbmNlKEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfaW5zdGFu
Y2VvZihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3Bf
aW5zdGFuY2VvZihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAg
IGF1dG8mIGJ5dGVjb2RlID0gKnJlaW50ZXJwcmV0X2Nhc3Q8T3BJbnN0YW5jZW9mKj4oY3VycmVu
dEluc3RydWN0aW9uKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0KCk7Ci0gICAgaW50IHZh
bHVlID0gYnl0ZWNvZGUudmFsdWUoKTsKLSAgICBpbnQgcHJvdG8gPSBieXRlY29kZS5wcm90b3R5
cGUoKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluc3Rh
bmNlb2Y+KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKKyAgICBpbnQg
dmFsdWUgPSBieXRlY29kZS52YWx1ZS5vZmZzZXQoKTsKKyAgICBpbnQgcHJvdG8gPSBieXRlY29k
ZS5wcm90b3R5cGUub2Zmc2V0KCk7CiAKICAgICAvLyBMb2FkIHRoZSBvcGVyYW5kcyBpbnRvIHJl
Z2lzdGVycy4KICAgICAvLyBXZSB1c2UgcmVnVDAgZm9yIGJhc2VWYWwgc2luY2Ugd2Ugd2lsbCBi
ZSBkb25lIHdpdGggdGhpcyBmaXJzdCwgYW5kIHdlIGNhbiB0aGVuIHVzZSBpdCBmb3IgdGhlIHJl
c3VsdC4KQEAgLTE2NCwyMCArMTcxLDIwIEBAIHZvaWQgSklUOjplbWl0X29wX2luc3RhbmNlb2Yo
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBlbWl0U3RvcmVCb29sKGRzdCwg
cmVnVDApOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3RvbShJbnN0cnVj
dGlvbiopCit2b2lkIEpJVDo6ZW1pdF9vcF9pbnN0YW5jZW9mX2N1c3RvbShjb25zdCBJbnN0cnVj
dGlvbiopCiB7CiAgICAgLy8gVGhpcyBhbHdheXMgZ29lcyB0byBzbG93IHBhdGggc2luY2Ugd2Ug
ZXhwZWN0IGl0IHRvIGJlIHJhcmUuCiAgICAgYWRkU2xvd0Nhc2UoanVtcCgpKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF9pbnN0YW5jZW9mKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgbGlua0Fs
bFNsb3dDYXNlcyhpdGVyKTsKICAgICAKLSAgICBhdXRvJiBieXRlY29kZSA9ICpyZWludGVycHJl
dF9jYXN0PE9wSW5zdGFuY2VvZio+KGN1cnJlbnRJbnN0cnVjdGlvbik7Ci0gICAgaW50IGRzdCA9
IGJ5dGVjb2RlLmRzdCgpOwotICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLnZhbHVlKCk7Ci0gICAg
aW50IHByb3RvID0gYnl0ZWNvZGUucHJvdG90eXBlKCk7CisgICAgYXV0byBieXRlY29kZSA9IGN1
cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJbnN0YW5jZW9mPigpOworICAgIGludCBkc3QgPSBieXRl
Y29kZS5kc3Qub2Zmc2V0KCk7CisgICAgaW50IHZhbHVlID0gYnl0ZWNvZGUudmFsdWUub2Zmc2V0
KCk7CisgICAgaW50IHByb3RvID0gYnl0ZWNvZGUucHJvdG90eXBlLm9mZnNldCgpOwogICAgIAog
ICAgIEpJVEluc3RhbmNlT2ZHZW5lcmF0b3ImIGdlbiA9IG1faW5zdGFuY2VPZnNbbV9pbnN0YW5j
ZU9mSW5kZXgrK107CiAgICAgCkBAIC0xODgsMTUgKzE5NSwxNSBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfaW5zdGFuY2VvZihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0NhcwogICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7
CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9pbnN0YW5jZW9mX2N1c3RvbShJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBp
dGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2ZfY3VzdG9tKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImIGl0ZXIpCiB7CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAotICAgIGF1dG8mIGJ5
dGVjb2RlID0gKnJlaW50ZXJwcmV0X2Nhc3Q8T3BJbnN0YW5jZW9mQ3VzdG9tKj4oY3VycmVudElu
c3RydWN0aW9uKTsKLSAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0KCk7Ci0gICAgaW50IHZhbHVl
ID0gYnl0ZWNvZGUudmFsdWUoKTsKLSAgICBpbnQgY29uc3RydWN0b3IgPSBieXRlY29kZS5jb25z
dHJ1Y3RvcigpOwotICAgIGludCBoYXNJbnN0YW5jZVZhbHVlID0gYnl0ZWNvZGUuaGFzSW5zdGFu
Y2VWYWx1ZSgpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
SW5zdGFuY2VvZkN1c3RvbT4oKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgp
OworICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLnZhbHVlLm9mZnNldCgpOworICAgIGludCBjb25z
dHJ1Y3RvciA9IGJ5dGVjb2RlLmNvbnN0cnVjdG9yLm9mZnNldCgpOworICAgIGludCBoYXNJbnN0
YW5jZVZhbHVlID0gYnl0ZWNvZGUuaGFzSW5zdGFuY2VWYWx1ZS5vZmZzZXQoKTsKIAogICAgIGVt
aXRMb2FkKHZhbHVlLCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRMb2FkUGF5bG9hZChjb25zdHJ1
Y3RvciwgcmVnVDIpOwpAQCAtMjA1LDEwICsyMTIsMTEgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29w
X2luc3RhbmNlb2ZfY3VzdG9tKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjwKICAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmV0dXJuVmFsdWVHUFIpOwogfQogICAgIAotdm9p
ZCBKSVQ6OmVtaXRfb3BfaXNfZW1wdHkoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
K3ZvaWQgSklUOjplbWl0X29wX2lzX2VtcHR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiB7Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQ7Ci0gICAgaW50IHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzRW1wdHk+KCk7Cisg
ICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKKyAgICBpbnQgdmFsdWUgPSBieXRl
Y29kZS5vcGVyYW5kLm9mZnNldCgpOwogICAgIAogICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMSwg
cmVnVDApOwogICAgIGNvbXBhcmUzMihFcXVhbCwgcmVnVDEsIFRydXN0ZWRJbW0zMihKU1ZhbHVl
OjpFbXB0eVZhbHVlVGFnKSwgcmVnVDApOwpAQCAtMjE2LDEwICsyMjQsMTEgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfaXNfZW1wdHkoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBl
bWl0U3RvcmVCb29sKGRzdCwgcmVnVDApOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9pc191bmRl
ZmluZWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29w
X2lzX3VuZGVmaW5lZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewot
ICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCB2
YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgYXV0byBieXRlY29k
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc1VuZGVmaW5lZD4oKTsKKyAgICBpbnQgZHN0
ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOworICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLm9wZXJh
bmQub2Zmc2V0KCk7CiAgICAgCiAgICAgZW1pdExvYWQodmFsdWUsIHJlZ1QxLCByZWdUMCk7CiAg
ICAgSnVtcCBpc0NlbGwgPSBicmFuY2hJZkNlbGwocmVnVDEpOwpAQCAtMjQzLDIwICsyNTIsMjIg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfaXNfdW5kZWZpbmVkKEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiAgICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QwKTsKIH0KIAotdm9pZCBKSVQ6
OmVtaXRfb3BfaXNfYm9vbGVhbihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9p
ZCBKSVQ6OmVtaXRfb3BfaXNfYm9vbGVhbihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5k
OwotICAgIGludCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAg
YXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BJc0Jvb2xlYW4+KCk7Cisg
ICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKKyAgICBpbnQgdmFsdWUgPSBieXRl
Y29kZS5vcGVyYW5kLm9mZnNldCgpOwogICAgIAogICAgIGVtaXRMb2FkVGFnKHZhbHVlLCByZWdU
MCk7CiAgICAgY29tcGFyZTMyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbTMyKEpTVmFsdWU6OkJv
b2xlYW5UYWcpLCByZWdUMCk7CiAgICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QwKTsKIH0KIAot
dm9pZCBKSVQ6OmVtaXRfb3BfaXNfbnVtYmVyKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCit2b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKIHsKLSAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZDsKLSAgICBpbnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
OworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSXNOdW1iZXI+
KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKKyAgICBpbnQgdmFsdWUg
PSBieXRlY29kZS5vcGVyYW5kLm9mZnNldCgpOwogICAgIAogICAgIGVtaXRMb2FkVGFnKHZhbHVl
LCByZWdUMCk7CiAgICAgYWRkMzIoVHJ1c3RlZEltbTMyKDEpLCByZWdUMCk7CkBAIC0yNjQsMTEg
KzI3NSwxMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19udW1iZXIoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKICAgICBlbWl0U3RvcmVCb29sKGRzdCwgcmVnVDApOwogfQogCi12b2lk
IEpJVDo6ZW1pdF9vcF9pc19jZWxsX3dpdGhfdHlwZShJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfaXNfY2VsbF93aXRoX3R5cGUoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBpbnQgZHN0ID0gY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgdmFsdWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kOwotICAgIGludCB0eXBlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3Bl
cmFuZDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzQ2Vs
bFdpdGhUeXBlPigpOworICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7CisgICAg
aW50IHZhbHVlID0gYnl0ZWNvZGUub3BlcmFuZC5vZmZzZXQoKTsKKyAgICBpbnQgdHlwZSA9IGJ5
dGVjb2RlLnR5cGU7CiAKICAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKICAgICBK
dW1wIGlzTm90Q2VsbCA9IGJyYW5jaElmTm90Q2VsbChyZWdUMSk7CkBAIC0yODMsMTAgKzI5NSwx
MSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19jZWxsX3dpdGhfdHlwZShJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZWdUMCk7CiB9CiAKLXZv
aWQgSklUOjplbWl0X29wX2lzX29iamVjdChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQordm9pZCBKSVQ6OmVtaXRfb3BfaXNfb2JqZWN0KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQ7Ci0gICAgaW50IHZhbHVlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsK
KyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcElzT2JqZWN0Pigp
OworICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7CisgICAgaW50IHZhbHVlID0g
Ynl0ZWNvZGUub3BlcmFuZC5vZmZzZXQoKTsKIAogICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMSwg
cmVnVDApOwogICAgIEp1bXAgaXNOb3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKTsKQEAg
LTMwMSwxMCArMzE0LDExIEBAIHZvaWQgSklUOjplbWl0X29wX2lzX29iamVjdChJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZWdUMCk7CiB9
CiAKLXZvaWQgSklUOjplbWl0X29wX3RvX3ByaW1pdGl2ZShJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfdG9fcHJpbWl0aXZlKGNvbnN0IEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHNyYyA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51
Lm9wZXJhbmQ7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BU
b1ByaW1pdGl2ZT4oKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOworICAg
IGludCBzcmMgPSBieXRlY29kZS5zcmMub2Zmc2V0KCk7CiAKICAgICBlbWl0TG9hZChzcmMsIHJl
Z1QxLCByZWdUMCk7CiAKQEAgLTMxNiwxOSArMzMwLDIxIEBAIHZvaWQgSklUOjplbWl0X29wX3Rv
X3ByaW1pdGl2ZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgICAgICBlbWl0
U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9zZXRfZnVu
Y3Rpb25fbmFtZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVt
aXRfb3Bfc2V0X2Z1bmN0aW9uX25hbWUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKIHsKLSAgICBpbnQgZnVuYyA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7
Ci0gICAgaW50IG5hbWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGF1
dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU2V0RnVuY3Rpb25OYW1lPigp
OworICAgIGludCBmdW5jID0gYnl0ZWNvZGUuZnVuY3Rpb24ub2Zmc2V0KCk7CisgICAgaW50IG5h
bWUgPSBieXRlY29kZS5uYW1lLm9mZnNldCgpOwogICAgIGVtaXRMb2FkUGF5bG9hZChmdW5jLCBy
ZWdUMSk7CiAgICAgZW1pdExvYWQobmFtZSwgcmVnVDMsIHJlZ1QyKTsKICAgICBjYWxsT3BlcmF0
aW9uKG9wZXJhdGlvblNldEZ1bmN0aW9uTmFtZSwgcmVnVDEsIEpTVmFsdWVSZWdzKHJlZ1QzLCBy
ZWdUMikpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9ub3QoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX25vdChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kOwotICAgIGludCBzcmMgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
OworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTm90PigpOwor
ICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7CisgICAgaW50IHNyYyA9IGJ5dGVj
b2RlLm9wZXJhbmQub2Zmc2V0KCk7CiAKICAgICBlbWl0TG9hZFRhZyhzcmMsIHJlZ1QwKTsKIApA
QCAtMzM5LDEwICszNTUsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfbm90KEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QwLCAoZHN0ID09
IHNyYykpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9qZmFsc2UoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX2pmYWxzZShjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGludCBjb25kID0gY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZDsKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMl0udS5vcGVyYW5kOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wSmZhbHNlPigpOworICAgIGludCBjb25kID0gYnl0ZWNvZGUuY29uZGl0aW9uLm9mZnNl
dCgpOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9u
LCBieXRlY29kZS50YXJnZXQpOwogCiAgICAgZW1pdExvYWQoY29uZCwgcmVnVDEsIHJlZ1QwKTsK
IApAQCAtMzUzLDEwICszNzAsMTEgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfamZhbHNlKEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYWRkSnVtcChicmFuY2hJZkZhbHNleSgqdm0o
KSwgdmFsdWUsIHNjcmF0Y2gxLCBzY3JhdGNoMiwgZnBSZWdUMCwgZnBSZWdUMSwgc2hvdWxkQ2hl
Y2tNYXNxdWVyYWRlc0FzVW5kZWZpbmVkLCBtX2NvZGVCbG9jay0+Z2xvYmFsT2JqZWN0KCkpLCB0
YXJnZXQpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfanRydWUoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBpbnQgY29uZCA9IGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEp0cnVlPigpOworICAgIGludCBjb25kID0gYnl0ZWNvZGUuY29uZGl0aW9uLm9mZnNldCgp
OworICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBi
eXRlY29kZS50YXJnZXQpOwogCiAgICAgZW1pdExvYWQoY29uZCwgcmVnVDEsIHJlZ1QwKTsKICAg
ICBib29sIHNob3VsZENoZWNrTWFzcXVlcmFkZXNBc1VuZGVmaW5lZCA9IHRydWU7CkBAIC0zNjYs
MTAgKzM4NCwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qdHJ1ZShJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogICAgIGFkZEp1bXAoYnJhbmNoSWZUcnV0aHkoKnZtKCksIHZhbHVlLCBz
Y3JhdGNoMSwgc2NyYXRjaDIsIGZwUmVnVDAsIGZwUmVnVDEsIHNob3VsZENoZWNrTWFzcXVlcmFk
ZXNBc1VuZGVmaW5lZCwgbV9jb2RlQmxvY2stPmdsb2JhbE9iamVjdCgpKSwgdGFyZ2V0KTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXRfb3BfamVxX251bGwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKK3ZvaWQgSklUOjplbWl0X29wX2plcV9udWxsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaW50IHNyYyA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUu
b3BlcmFuZDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEpl
cU51bGw+KCk7CisgICAgaW50IHNyYyA9IGJ5dGVjb2RlLnZhbHVlLm9mZnNldCgpOworICAgIHVu
c2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS50
YXJnZXQpOwogCiAgICAgZW1pdExvYWQoc3JjLCByZWdUMSwgcmVnVDApOwogCkBAIC0zOTEsMTAg
KzQxMCwxMSBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9qZXFfbnVsbChJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogICAgIG1hc3F1ZXJhZGVzR2xvYmFsT2JqZWN0SXNGb3JlaWduLmxpbmso
dGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2puZXFfbnVsbChJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKGNvbnN0IEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaW50IHNyYyA9IGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudEluc3Ry
dWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcEpuZXFOdWxsPigpOworICAgIGludCBzcmMgPSBieXRlY29kZS52YWx1ZS5vZmZz
ZXQoKTsKKyAgICB1bnNpZ25lZCB0YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlv
biwgYnl0ZWNvZGUudGFyZ2V0KTsKIAogICAgIGVtaXRMb2FkKHNyYywgcmVnVDEsIHJlZ1QwKTsK
IApAQCAtNDE2LDI2ICs0MzYsMzAgQEAgdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcV9udWxsKEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgd2FzTm90SW1tZWRpYXRlLmxpbmsodGhp
cyk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2puZXFfcHRyKEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxX3B0cihjb25zdCBJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGludCBzcmMgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kOwotICAgIFNwZWNpYWw6OlBvaW50ZXIgcHRyID0gY3VycmVudEluc3Ry
dWN0aW9uWzJdLnUuc3BlY2lhbFBvaW50ZXI7Ci0gICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVu
dEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcEpuZXFQdHI+KCk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29k
ZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgaW50IHNyYyA9IGJ5dGVjb2RlLnZhbHVlLm9m
ZnNldCgpOworICAgIFNwZWNpYWw6OlBvaW50ZXIgcHRyID0gYnl0ZWNvZGUuc3BlY2lhbFBvaW50
ZXI7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLnRhcmdldCk7CiAKICAgICBlbWl0TG9hZChzcmMsIHJlZ1QxLCByZWdUMCk7CiAg
ICAgSnVtcCBub3RDZWxsID0gYnJhbmNoSWZOb3RDZWxsKHJlZ1QxKTsKICAgICBKdW1wIGVxdWFs
ID0gYnJhbmNoUHRyKEVxdWFsLCByZWdUMCwgVHJ1c3RlZEltbVB0cihhY3R1YWxQb2ludGVyRm9y
KG1fY29kZUJsb2NrLCBwdHIpKSk7CiAgICAgbm90Q2VsbC5saW5rKHRoaXMpOwotICAgIHN0b3Jl
MzIoVHJ1c3RlZEltbTMyKDEpLCAmY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZCk7Cisg
ICAgc3RvcmU4KFRydXN0ZWRJbW0zMigxKSwgJm1ldGFkYXRhLmhhc0p1bXBlZCk7CiAgICAgYWRk
SnVtcChqdW1wKCksIHRhcmdldCk7CiAgICAgZXF1YWwubGluayh0aGlzKTsKIH0KIAotdm9pZCBK
SVQ6OmVtaXRfb3BfZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklU
OjplbWl0X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0g
ICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHNy
YzEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGludCBzcmMyID0gY3Vy
cmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVu
dEluc3RydWN0aW9uLT5hczxPcEVxPigpOworCisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5v
ZmZzZXQoKTsKKyAgICBpbnQgc3JjMSA9IGJ5dGVjb2RlLmxocy5vZmZzZXQoKTsKKyAgICBpbnQg
c3JjMiA9IGJ5dGVjb2RlLnJocy5vZmZzZXQoKTsKIAogICAgIGVtaXRMb2FkMihzcmMxLCByZWdU
MSwgcmVnVDAsIHNyYzIsIHJlZ1QzLCByZWdUMik7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIo
Tm90RXF1YWwsIHJlZ1QxLCByZWdUMykpOwpAQCAtNDQ3LDkgKzQ3MSwxMCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9lcShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGVtaXRTdG9y
ZUJvb2woZHN0LCByZWdUMCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9lcShJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2VxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7
Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BFcT4oKTsKKyAgICBpbnQgZHN0
ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOwogCiAgICAgSnVtcExpc3Qgc3RvcmVSZXN1bHQ7CiAg
ICAgSnVtcExpc3QgZ2VuZXJpY0Nhc2U7CkBAIC00NzMsMTEgKzQ5OCwxMiBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXNlRW50cnk+OgogICAgIGVtaXRTdG9yZUJvb2woZHN0LCByZXR1cm5WYWx1ZUdQUik7CiB9
CiAKLXZvaWQgSklUOjplbWl0X29wX2plcShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQordm9pZCBKSVQ6OmVtaXRfb3BfamVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7Ci0gICAgaW50IHRhcmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJh
bmQ7Ci0gICAgaW50IHNyYzEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAg
IGludCBzcmMyID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEplcT4oKTsKKyAgICB1bnNpZ25lZCB0
YXJnZXQgPSBqdW1wVGFyZ2V0KGN1cnJlbnRJbnN0cnVjdGlvbiwgYnl0ZWNvZGUudGFyZ2V0KTsK
KyAgICBpbnQgc3JjMSA9IGJ5dGVjb2RlLmxocy5vZmZzZXQoKTsKKyAgICBpbnQgc3JjMiA9IGJ5
dGVjb2RlLnJocy5vZmZzZXQoKTsKIAogICAgIGVtaXRMb2FkMihzcmMxLCByZWdUMSwgcmVnVDAs
IHNyYzIsIHJlZ1QzLCByZWdUMik7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoMzIoTm90RXF1YWws
IHJlZ1QxLCByZWdUMykpOwpAQCAtNTEyLDE2ICs1MzgsMTkgQEAgdm9pZCBKSVQ6OmNvbXBpbGVP
cEVxSnVtcFNsb3coVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlciwgQ29tcGls
ZU9wRXEKICAgICBkb25lLmxpbmsodGhpcyk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9q
ZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9qZXEoY29uc3QgSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRv
ciYgaXRlcikKIHsKLSAgICBjb21waWxlT3BFcUp1bXBTbG93KGl0ZXIsIENvbXBpbGVPcEVxVHlw
ZTo6RXEsIGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpOworICAgIGF1dG8gYnl0ZWNv
ZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wSmVxPigpOworICAgIHVuc2lnbmVkIHRhcmdl
dCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS50YXJnZXQpOworICAg
IGNvbXBpbGVPcEVxSnVtcFNsb3coaXRlciwgQ29tcGlsZU9wRXFUeXBlOjpFcSwgdGFyZ2V0KTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfbmVxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCit2b2lkIEpJVDo6ZW1pdF9vcF9uZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbikKIHsKLSAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZDsKLSAgICBpbnQgc3JjMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAg
aW50IHNyYzIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxPigpOworICAgIGludCBkc3QgPSBi
eXRlY29kZS5kc3Qub2Zmc2V0KCk7CisgICAgaW50IHNyYzEgPSBieXRlY29kZS5saHMub2Zmc2V0
KCk7CisgICAgaW50IHNyYzIgPSBieXRlY29kZS5yaHMub2Zmc2V0KCk7CiAKICAgICBlbWl0TG9h
ZDIoc3JjMSwgcmVnVDEsIHJlZ1QwLCBzcmMyLCByZWdUMywgcmVnVDIpOwogICAgIGFkZFNsb3dD
YXNlKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMSwgcmVnVDMpKTsKQEAgLTUzMyw5ICs1NjIsMTAg
QEAgdm9pZCBKSVQ6OmVtaXRfb3BfbmVxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiAgICAgZW1pdFN0b3JlQm9vbChkc3QsIHJlZ1QwKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93
X29wX25lcShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VF
bnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX25lcShjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQogewotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wTmVx
PigpOworICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7CiAKICAgICBKdW1wTGlz
dCBzdG9yZVJlc3VsdDsKICAgICBKdW1wTGlzdCBnZW5lcmljQ2FzZTsKQEAgLTU2MCwxMSArNTkw
LDEyIEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9uZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+CiAgICAgZW1pdFN0b3JlQm9vbChkc3QsIHJl
dHVyblZhbHVlR1BSKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3Bfam5lcShJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3Bfam5lcShjb25zdCBJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGludCB0YXJnZXQgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgIGludCBzcmMxID0gY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZDsKLSAgICBpbnQgc3JjMiA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQ7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BKbmVx
PigpOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9u
LCBieXRlY29kZS50YXJnZXQpOworICAgIGludCBzcmMxID0gYnl0ZWNvZGUubGhzLm9mZnNldCgp
OworICAgIGludCBzcmMyID0gYnl0ZWNvZGUucmhzLm9mZnNldCgpOwogCiAgICAgZW1pdExvYWQy
KHNyYzEsIHJlZ1QxLCByZWdUMCwgc3JjMiwgcmVnVDMsIHJlZ1QyKTsKICAgICBhZGRTbG93Q2Fz
ZShicmFuY2gzMihOb3RFcXVhbCwgcmVnVDEsIHJlZ1QzKSk7CkBAIC01NzQsMTYgKzYwNSwyMCBA
QCB2b2lkIEpJVDo6ZW1pdF9vcF9qbmVxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiAgICAgYWRkSnVtcChicmFuY2gzMihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QyKSwgdGFyZ2V0KTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2puZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
OjplbWl0U2xvd19vcF9qbmVxKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7Ci0gICAgY29tcGlsZU9w
RXFKdW1wU2xvdyhpdGVyLCBDb21waWxlT3BFcVR5cGU6Ok5FcSwgY3VycmVudEluc3RydWN0aW9u
WzNdLnUub3BlcmFuZCk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BKbmVxPigpOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBUYXJnZXQoY3VycmVudElu
c3RydWN0aW9uLCBieXRlY29kZS50YXJnZXQpOworICAgIGNvbXBpbGVPcEVxSnVtcFNsb3coaXRl
ciwgQ29tcGlsZU9wRXFUeXBlOjpORXEsIHRhcmdldCk7CiB9CiAKLXZvaWQgSklUOjpjb21waWxl
T3BTdHJpY3RFcShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBDb21waWxlT3BTdHJp
Y3RFcVR5cGUgdHlwZSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjpjb21waWxl
T3BTdHJpY3RFcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBDb21waWxl
T3BTdHJpY3RFcVR5cGUgdHlwZSkKIHsKLSAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9u
WzFdLnUub3BlcmFuZDsKLSAgICBpbnQgc3JjMSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9w
ZXJhbmQ7Ci0gICAgaW50IHNyYzIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwor
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOworICAgIGlu
dCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7CisgICAgaW50IHNyYzEgPSBieXRlY29kZS5s
aHMub2Zmc2V0KCk7CisgICAgaW50IHNyYzIgPSBieXRlY29kZS5yaHMub2Zmc2V0KCk7CiAKICAg
ICBlbWl0TG9hZDIoc3JjMSwgcmVnVDEsIHJlZ1QwLCBzcmMyLCByZWdUMywgcmVnVDIpOwogCkBA
IC02MDcsMjEgKzY0MiwyMyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXEoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29tcGlsZU9wU3RyaWN0RXFUeQogICAgIGVtaXRTdG9y
ZUJvb2woZHN0LCByZWdUMCk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX3N0cmljdGVxKEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9zdHJpY3RlcShj
b25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGNvbXBpbGVPcFN0
cmljdEVxKGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlOjpTdHJpY3RF
cSk7CisgICAgY29tcGlsZU9wU3RyaWN0RXE8T3BTdHJpY3RlcT4oY3VycmVudEluc3RydWN0aW9u
LCBDb21waWxlT3BTdHJpY3RFcVR5cGU6OlN0cmljdEVxKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRf
b3BfbnN0cmljdGVxKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6
ZW1pdF9vcF9uc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKLSAgICBjb21waWxlT3BTdHJpY3RFcShjdXJyZW50SW5zdHJ1Y3Rpb24sIENvbXBpbGVPcFN0
cmljdEVxVHlwZTo6TlN0cmljdEVxKTsKKyAgICBjb21waWxlT3BTdHJpY3RFcTxPcE5zdHJpY3Rl
cT4oY3VycmVudEluc3RydWN0aW9uLCBDb21waWxlT3BTdHJpY3RFcVR5cGU6Ok5TdHJpY3RFcSk7
CiB9CiAKLXZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RFcUp1bXAoSW5zdHJ1Y3Rpb24qIGN1cnJl
bnRJbnN0cnVjdGlvbiwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlIHR5cGUpCit0ZW1wbGF0ZTx0eXBl
bmFtZSBPcD4KK3ZvaWQgSklUOjpjb21waWxlT3BTdHJpY3RFcUp1bXAoY29uc3QgSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29tcGlsZU9wU3RyaWN0RXFUeXBlIHR5cGUpCiB7Ci0g
ICAgaW50IHRhcmdldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgaW50
IHNyYzEgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBzcmMyID0g
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcD4oKTsKKyAgICBpbnQgdGFyZ2V0ID0ganVtcFRhcmdldChj
dXJyZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLnRhcmdldCk7CisgICAgaW50IHNyYzEgPSBieXRl
Y29kZS5saHMub2Zmc2V0KCk7CisgICAgaW50IHNyYzIgPSBieXRlY29kZS5yaHMub2Zmc2V0KCk7
CiAKICAgICBlbWl0TG9hZDIoc3JjMSwgcmVnVDEsIHJlZ1QwLCBzcmMyLCByZWdUMywgcmVnVDIp
OwogCkBAIC02NDMsMzggKzY4MCw0MSBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wU3RyaWN0RXFKdW1w
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIENvbXBpbGVPcFN0cmljdAogICAgICAg
ICBhZGRKdW1wKGJyYW5jaDMyKE5vdEVxdWFsLCByZWdUMCwgcmVnVDIpLCB0YXJnZXQpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdF9vcF9qc3RyaWN0ZXEoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKK3ZvaWQgSklUOjplbWl0X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewotICAgIGNvbXBpbGVPcFN0cmljdEVxSnVtcChjdXJyZW50SW5z
dHJ1Y3Rpb24sIENvbXBpbGVPcFN0cmljdEVxVHlwZTo6U3RyaWN0RXEpOworICAgIGNvbXBpbGVP
cFN0cmljdEVxSnVtcDxPcEpzdHJpY3RlcT4oY3VycmVudEluc3RydWN0aW9uLCBDb21waWxlT3BT
dHJpY3RFcVR5cGU6OlN0cmljdEVxKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3Bfam5zdHJpY3Rl
cShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3Bfam5z
dHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGNv
bXBpbGVPcFN0cmljdEVxSnVtcChjdXJyZW50SW5zdHJ1Y3Rpb24sIENvbXBpbGVPcFN0cmljdEVx
VHlwZTo6TlN0cmljdEVxKTsKKyAgICBjb21waWxlT3BTdHJpY3RFcUp1bXA8T3BKbnN0cmljdGVx
PihjdXJyZW50SW5zdHJ1Y3Rpb24sIENvbXBpbGVPcFN0cmljdEVxVHlwZTo6TlN0cmljdEVxKTsK
IH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9p
ZCBKSVQ6OmVtaXRTbG93X29wX2pzdHJpY3RlcShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAg
IGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICB1bnNpZ25lZCB0YXJnZXQgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wSnN0cmljdGVxPigpOworICAgIHVuc2lnbmVkIHRhcmdldCA9IGp1bXBU
YXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBieXRlY29kZS50YXJnZXQpOwogICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uQ29tcGFyZVN0cmljdEVxLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDAp
LCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKICAgICBlbWl0SnVtcFNsb3dUb0hvdChicmFu
Y2hUZXN0MzIoTm9uWmVybywgcmV0dXJuVmFsdWVHUFIpLCB0YXJnZXQpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3Bfam5zdHJpY3RlcShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
LCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRT
bG93X29wX2puc3RyaWN0ZXEoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwg
VmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBsaW5rQWxsU2xv
d0Nhc2VzKGl0ZXIpOwogCi0gICAgdW5zaWduZWQgdGFyZ2V0ID0gY3VycmVudEluc3RydWN0aW9u
WzNdLnUub3BlcmFuZDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5h
czxPcEpuc3RyaWN0ZXE+KCk7CisgICAgdW5zaWduZWQgdGFyZ2V0ID0ganVtcFRhcmdldChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGJ5dGVjb2RlLnRhcmdldCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25Db21wYXJlU3RyaWN0RXEsIEpTVmFsdWVSZWdzKHJlZ1QxLCByZWdUMCksIEpTVmFsdWVS
ZWdzKHJlZ1QzLCByZWdUMikpOwogICAgIGVtaXRKdW1wU2xvd1RvSG90KGJyYW5jaFRlc3QzMiha
ZXJvLCByZXR1cm5WYWx1ZUdQUiksIHRhcmdldCk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2Vx
X251bGwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29w
X2VxX251bGwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBp
bnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgc3JjID0g
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3Vy
cmVudEluc3RydWN0aW9uLT5hczxPcEVxTnVsbD4oKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUu
ZHN0Lm9mZnNldCgpOworICAgIGludCBzcmMgPSBieXRlY29kZS5vcGVyYW5kLm9mZnNldCgpOwog
CiAgICAgZW1pdExvYWQoc3JjLCByZWdUMSwgcmVnVDApOwogICAgIEp1bXAgaXNJbW1lZGlhdGUg
PSBicmFuY2hJZk5vdENlbGwocmVnVDEpOwpAQCAtNzAyLDEwICs3NDIsMTEgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfZXFfbnVsbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGVt
aXRTdG9yZUJvb2woZHN0LCByZWdUMSk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX25lcV9udWxs
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9uZXFf
bnVsbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGludCBk
c3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBzcmMgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50
SW5zdHJ1Y3Rpb24tPmFzPE9wTmVxTnVsbD4oKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0
Lm9mZnNldCgpOworICAgIGludCBzcmMgPSBieXRlY29kZS5vcGVyYW5kLm9mZnNldCgpOwogCiAg
ICAgZW1pdExvYWQoc3JjLCByZWdUMSwgcmVnVDApOwogICAgIEp1bXAgaXNJbW1lZGlhdGUgPSBi
cmFuY2hJZk5vdENlbGwocmVnVDEpOwpAQCAtNzMzLDE5ICs3NzQsMjEgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfbmVxX251bGwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBlbWl0
U3RvcmVCb29sKGRzdCwgcmVnVDEpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF90aHJvdyhJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfdGhyb3coY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKKyAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRocm93PigpOwogICAgIEFTU0VSVChyZWdUMCA9
PSByZXR1cm5WYWx1ZUdQUik7CiAgICAgY29weUNhbGxlZVNhdmVzVG9FbnRyeUZyYW1lQ2FsbGVl
U2F2ZXNCdWZmZXIodm0oKS0+dG9wRW50cnlGcmFtZSk7Ci0gICAgZW1pdExvYWQoY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZCwgcmVnVDEsIHJlZ1QwKTsKKyAgICBlbWl0TG9hZChieXRl
Y29kZS52YWx1ZS5vZmZzZXQoKSwgcmVnVDEsIHJlZ1QwKTsKICAgICBjYWxsT3BlcmF0aW9uTm9F
eGNlcHRpb25DaGVjayhvcGVyYXRpb25UaHJvdywgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSk7
CiAgICAganVtcFRvRXhjZXB0aW9uSGFuZGxlcigqdm0oKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0
X29wX3RvX251bWJlcihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6
OmVtaXRfb3BfdG9fbnVtYmVyKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
CiB7Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAg
aW50IHNyYyA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb051bWJlcj4oKTsKKyAgICBpbnQgZHN0
ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOworICAgIGludCBzcmMgPSBieXRlY29kZS5vcGVyYW5k
Lm9mZnNldCgpOwogCiAgICAgZW1pdExvYWQoc3JjLCByZWdUMSwgcmVnVDApOwogCkBAIC03NTMs
MTUgKzc5NiwxNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19udW1iZXIoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKICAgICBhZGRTbG93Q2FzZShicmFuY2gzMihBYm92ZU9yRXF1YWws
IHJlZ1QxLCBUcnVzdGVkSW1tMzIoSlNWYWx1ZTo6TG93ZXN0VGFnKSkpOwogICAgIGlzSW50MzIu
bGluayh0aGlzKTsKIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKKyAgICBlbWl0VmFs
dWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSk7CiAgICAgaWYg
KHNyYyAhPSBkc3QpCiAgICAgICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7CiB9CiAK
LXZvaWQgSklUOjplbWl0X29wX3RvX3N0cmluZyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfdG9fc3RyaW5nKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQ7Ci0gICAgaW50IHNyYyA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7
CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BUb1N0cmluZz4o
KTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOworICAgIGludCBzcmMgPSBi
eXRlY29kZS5vcGVyYW5kLm9mZnNldCgpOwogCiAgICAgZW1pdExvYWQoc3JjLCByZWdUMSwgcmVn
VDApOwogCkBAIC03NzIsMjMgKzgxNiwyNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF90b19zdHJpbmco
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICAgICAgZW1pdFN0b3JlKGRzdCwg
cmVnVDEsIHJlZ1QwKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfdG9fb2JqZWN0KEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF90b19vYmplY3QoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBpbnQgZHN0ID0gY3Vy
cmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgc3JjID0gY3VycmVudEluc3Ry
dWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcFRvT2JqZWN0PigpOworICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0
KCk7CisgICAgaW50IHNyYyA9IGJ5dGVjb2RlLm9wZXJhbmQub2Zmc2V0KCk7CiAKICAgICBlbWl0
TG9hZChzcmMsIHJlZ1QxLCByZWdUMCk7CiAKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdENl
bGwocmVnVDEpKTsKICAgICBhZGRTbG93Q2FzZShicmFuY2hJZk5vdE9iamVjdChyZWdUMCkpOwog
Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOworICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKICAgICBpZiAoc3JjICE9IGRzdCkK
ICAgICAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRfb3BfY2F0Y2goSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjpl
bWl0X29wX2NhdGNoKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Cisg
ICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BDYXRjaD4oKTsKKwog
ICAgIHJlc3RvcmVDYWxsZWVTYXZlc0Zyb21FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0o
KS0+dG9wRW50cnlGcmFtZSk7CiAKICAgICBtb3ZlKFRydXN0ZWRJbW1QdHIobV92bSksIHJlZ1Qz
KTsKQEAgLTgxMSwxMyArODU4LDEzIEBAIHZvaWQgSklUOjplbWl0X29wX2NhdGNoKEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAKICAgICBzdG9yZTMyKFRydXN0ZWRJbW0zMigwKSwg
QWRkcmVzcyhyZWdUMywgVk06OmV4Y2VwdGlvbk9mZnNldCgpKSk7CiAKLSAgICB1bnNpZ25lZCBl
eGNlcHRpb24gPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOworICAgIHVuc2lnbmVk
IGV4Y2VwdGlvbiA9IGJ5dGVjb2RlLmV4Y2VwdGlvbi5vZmZzZXQoKTsKICAgICBlbWl0U3RvcmUo
ZXhjZXB0aW9uLCByZWdUMSwgcmVnVDIpOwogCiAgICAgbG9hZDMyKEFkZHJlc3MocmVnVDIsIEV4
Y2VwdGlvbjo6dmFsdWVPZmZzZXQoKSArIE9CSkVDVF9PRkZTRVRPRihKU1ZhbHVlLCB1LmFzQml0
cy5wYXlsb2FkKSksIHJlZ1QwKTsKICAgICBsb2FkMzIoQWRkcmVzcyhyZWdUMiwgRXhjZXB0aW9u
Ojp2YWx1ZU9mZnNldCgpICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUsIHUuYXNCaXRzLnRhZykp
LCByZWdUMSk7CiAKLSAgICB1bnNpZ25lZCB0aHJvd25WYWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQ7CisgICAgdW5zaWduZWQgdGhyb3duVmFsdWUgPSBieXRlY29kZS50aHJv
d25WYWx1ZS5vZmZzZXQoKTsKICAgICBlbWl0U3RvcmUodGhyb3duVmFsdWUsIHJlZ1QxLCByZWdU
MCk7CiAKICNpZiBFTkFCTEUoREZHX0pJVCkKQEAgLTgyNSw3ICs4NzIsOCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9jYXRjaChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIC8vIGFy
Z3VtZW50IHR5cGUgcHJvb2ZzLCBzdG9yaW5nIGxvY2FscyB0byB0aGUgYnVmZmVyLCBldGMKICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTc1NTk4CiAKLSAg
ICBWYWx1ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyKiBidWZmZXIgPSBzdGF0aWNfY2FzdDxWYWx1
ZVByb2ZpbGVBbmRPcGVyYW5kQnVmZmVyKj4oY3VycmVudEluc3RydWN0aW9uWzNdLnUucG9pbnRl
cik7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7
CisgICAgVmFsdWVQcm9maWxlQW5kT3BlcmFuZEJ1ZmZlciogYnVmZmVyID0gbWV0YWRhdGEuYnVm
ZmVyOwogICAgIGlmIChidWZmZXIgfHwgIXNob3VsZEVtaXRQcm9maWxpbmcoKSkKICAgICAgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25UcnlPU1JFbnRlckF0Q2F0Y2gsIG1fYnl0ZWNvZGVPZmZz
ZXQpOwogICAgIGVsc2UKQEAgLTg0NCwyNCArODkyLDI2IEBAIHZvaWQgSklUOjplbWl0X29wX2Nh
dGNoKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAjZW5kaWYgLy8gRU5BQkxFKERG
R19KSVQpCiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2lkZW50aXR5X3dpdGhfcHJvZmlsZShJbnN0
cnVjdGlvbiopCit2b2lkIEpJVDo6ZW1pdF9vcF9pZGVudGl0eV93aXRoX3Byb2ZpbGUoY29uc3Qg
SW5zdHJ1Y3Rpb24qKQogewogICAgIC8vIFdlIGRvbid0IG5lZWQgdG8gZG8gYW55dGhpbmcgaGVy
ZS4uLgogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcGFyZW50X3Njb3BlKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfcGFyZW50X3Njb3Bl
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaW50IGN1cnJl
bnRTY29wZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CisgICAgYXV0byBieXRl
Y29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRQYXJlbnRTY29wZT4oKTsKKyAgICBp
bnQgY3VycmVudFNjb3BlID0gYnl0ZWNvZGUuc2NvcGUub2Zmc2V0KCk7CiAgICAgZW1pdExvYWRQ
YXlsb2FkKGN1cnJlbnRTY29wZSwgcmVnVDApOwogICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMCwg
SlNTY29wZTo6b2Zmc2V0T2ZOZXh0KCkpLCByZWdUMCk7Ci0gICAgZW1pdFN0b3JlQ2VsbChjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZWdUMCk7CisgICAgZW1pdFN0b3JlQ2VsbChi
eXRlY29kZS5kc3Qub2Zmc2V0KCksIHJlZ1QwKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3Bfc3dp
dGNoX2ltbShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRf
b3Bfc3dpdGNoX2ltbShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewot
ICAgIHNpemVfdCB0YWJsZUluZGV4ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsK
LSAgICB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZDsKLSAgICB1bnNpZ25lZCBzY3J1dGluZWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5v
cGVyYW5kOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3dp
dGNoSW1tPigpOworICAgIHNpemVfdCB0YWJsZUluZGV4ID0gYnl0ZWNvZGUudGFibGVJbmRleDsK
KyAgICB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rp
b24sIGJ5dGVjb2RlLmRlZmF1bHRPZmZzZXQpOworICAgIHVuc2lnbmVkIHNjcnV0aW5lZSA9IGJ5
dGVjb2RlLnNjcnV0aW5lZS5vZmZzZXQoKTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZv
ciBzd2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCiAgICAg
U2ltcGxlSnVtcFRhYmxlKiBqdW1wVGFibGUgPSAmbV9jb2RlQmxvY2stPnN3aXRjaEp1bXBUYWJs
ZSh0YWJsZUluZGV4KTsKQEAgLTg3MywxMSArOTIzLDEyIEBAIHZvaWQgSklUOjplbWl0X29wX3N3
aXRjaF9pbW0oSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBqdW1wKHJldHVy
blZhbHVlR1BSLCBOb1B0clRhZyk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX3N3aXRjaF9jaGFy
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0
Y2hfY2hhcihjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIHNp
emVfdCB0YWJsZUluZGV4ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICB1
bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsK
LSAgICB1bnNpZ25lZCBzY3J1dGluZWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5k
OworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3dpdGNoQ2hh
cj4oKTsKKyAgICBzaXplX3QgdGFibGVJbmRleCA9IGJ5dGVjb2RlLnRhYmxlSW5kZXg7CisgICAg
dW5zaWduZWQgZGVmYXVsdE9mZnNldCA9IGp1bXBUYXJnZXQoY3VycmVudEluc3RydWN0aW9uLCBi
eXRlY29kZS5kZWZhdWx0T2Zmc2V0KTsKKyAgICB1bnNpZ25lZCBzY3J1dGluZWUgPSBieXRlY29k
ZS5zY3J1dGluZWUub2Zmc2V0KCk7CiAKICAgICAvLyBjcmVhdGUganVtcCB0YWJsZSBmb3Igc3dp
dGNoIGRlc3RpbmF0aW9ucywgdHJhY2sgdGhpcyBzd2l0Y2ggc3RhdGVtZW50LgogICAgIFNpbXBs
ZUp1bXBUYWJsZSoganVtcFRhYmxlID0gJm1fY29kZUJsb2NrLT5zd2l0Y2hKdW1wVGFibGUodGFi
bGVJbmRleCk7CkBAIC04ODksMTEgKzk0MCwxMiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9zd2l0Y2hf
Y2hhcihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGp1bXAocmV0dXJuVmFs
dWVHUFIsIE5vUHRyVGFnKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNoX3N0cmluZyhJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3Bfc3dpdGNo
X3N0cmluZyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIHNp
emVfdCB0YWJsZUluZGV4ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICB1
bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsK
LSAgICB1bnNpZ25lZCBzY3J1dGluZWUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5k
OworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wU3dpdGNoU3Ry
aW5nPigpOworICAgIHNpemVfdCB0YWJsZUluZGV4ID0gYnl0ZWNvZGUudGFibGVJbmRleDsKKyAg
ICB1bnNpZ25lZCBkZWZhdWx0T2Zmc2V0ID0ganVtcFRhcmdldChjdXJyZW50SW5zdHJ1Y3Rpb24s
IGJ5dGVjb2RlLmRlZmF1bHRPZmZzZXQpOworICAgIHVuc2lnbmVkIHNjcnV0aW5lZSA9IGJ5dGVj
b2RlLnNjcnV0aW5lZS5vZmZzZXQoKTsKIAogICAgIC8vIGNyZWF0ZSBqdW1wIHRhYmxlIGZvciBz
d2l0Y2ggZGVzdGluYXRpb25zLCB0cmFjayB0aGlzIHN3aXRjaCBzdGF0ZW1lbnQuCiAgICAgU3Ry
aW5nSnVtcFRhYmxlKiBqdW1wVGFibGUgPSAmbV9jb2RlQmxvY2stPnN0cmluZ1N3aXRjaEp1bXBU
YWJsZSh0YWJsZUluZGV4KTsKQEAgLTkwNCw0MSArOTU2LDQ1IEBAIHZvaWQgSklUOjplbWl0X29w
X3N3aXRjaF9zdHJpbmcoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBqdW1w
KHJldHVyblZhbHVlR1BSLCBOb1B0clRhZyk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2RlYnVn
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9kZWJ1
Zyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogeworICAgIGF1dG8gYnl0
ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRGVidWc+KCk7CiAgICAgbG9hZDMyKGNv
ZGVCbG9jaygpLT5kZWJ1Z2dlclJlcXVlc3RzQWRkcmVzcygpLCByZWdUMCk7CiAgICAgSnVtcCBu
b0RlYnVnZ2VyUmVxdWVzdHMgPSBicmFuY2hUZXN0MzIoWmVybywgcmVnVDApOwotICAgIGNhbGxP
cGVyYXRpb24ob3BlcmF0aW9uRGVidWcsIGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQp
OworICAgIGNhbGxPcGVyYXRpb24ob3BlcmF0aW9uRGVidWcsIHN0YXRpY19jYXN0PGludD4oYnl0
ZWNvZGUuZGVidWdIb29rVHlwZSkpOwogICAgIG5vRGVidWdnZXJSZXF1ZXN0cy5saW5rKHRoaXMp
OwogfQogCiAKLXZvaWQgSklUOjplbWl0X29wX2VudGVyKEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9lbnRlcihjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIGVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCk7CiAg
ICAgCiAgICAgLy8gRXZlbiB0aG91Z2ggSklUIGNvZGUgZG9lc24ndCB1c2UgdGhlbSwgd2UgaW5p
dGlhbGl6ZSBvdXIgY29uc3RhbnQKICAgICAvLyByZWdpc3RlcnMgdG8gemFwIHN0YWxlIHBvaW50
ZXJzLCB0byBhdm9pZCB1bm5lY2Vzc2FyaWx5IHByb2xvbmdpbmcKICAgICAvLyBvYmplY3QgbGlm
ZXRpbWUgYW5kIGluY3JlYXNpbmcgR0MgcHJlc3N1cmUuCi0gICAgZm9yIChpbnQgaSA9IDA7IGkg
PCBtX2NvZGVCbG9jay0+bnVtVmFycygpOyArK2kpCisgICAgZm9yIChpbnQgaSA9IENvZGVCbG9j
azo6bGxpbnRCYXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpOyBpIDwg
bV9jb2RlQmxvY2stPm51bVZhcnMoKTsgKytpKQogICAgICAgICBlbWl0U3RvcmUodmlydHVhbFJl
Z2lzdGVyRm9yTG9jYWwoaSkub2Zmc2V0KCksIGpzVW5kZWZpbmVkKCkpOwogCiAgICAgSklUU2xv
d1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0
aF9lbnRlcik7CiAgICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRf
b3BfZ2V0X3Njb3BlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6
ZW1pdF9vcF9nZXRfc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKLSAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKKyAgICBh
dXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldFNjb3BlPigpOworICAg
IGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7CiAgICAgZW1pdEdldEZyb21DYWxsRnJh
bWVIZWFkZXJQdHIoQ2FsbEZyYW1lU2xvdDo6Y2FsbGVlLCByZWdUMCk7CiAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QwLCBKU0Z1bmN0aW9uOjpvZmZzZXRPZlNjb3BlQ2hhaW4oKSksIHJlZ1QwKTsK
ICAgICBlbWl0U3RvcmVDZWxsKGRzdCwgcmVnVDApOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9j
cmVhdGVfdGhpcyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVt
aXRfb3BfY3JlYXRlX3RoaXMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
IHsKLSAgICBpbnQgY2FsbGVlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAg
ICBXcml0ZUJhcnJpZXJCYXNlPEpTQ2VsbD4qIGNhY2hlZEZ1bmN0aW9uID0gJmN1cnJlbnRJbnN0
cnVjdGlvbls0XS51LmpzQ2VsbDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0
aW9uLT5hczxPcENyZWF0ZVRoaXM+KCk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5t
ZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgaW50IGNhbGxlZSA9IGJ5dGVjb2RlLmNhbGxlZS5v
ZmZzZXQoKTsKKyAgICBXcml0ZUJhcnJpZXJCYXNlPEpTQ2VsbD4qIGNhY2hlZEZ1bmN0aW9uID0g
Jm1ldGFkYXRhLmNhY2hlZENhbGxlZTsKICAgICBSZWdpc3RlcklEIGNhbGxlZVJlZyA9IHJlZ1Qw
OwogICAgIFJlZ2lzdGVySUQgcmFyZURhdGFSZWcgPSByZWdUNDsKICAgICBSZWdpc3RlcklEIHJl
c3VsdFJlZyA9IHJlZ1QwOwpAQCAtOTY3LDEwICsxMDIzLDEwIEBAIHZvaWQgSklUOjplbWl0X29w
X2NyZWF0ZV90aGlzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgbG9hZDMy
KEFkZHJlc3Moc2NyYXRjaFJlZywgRnVuY3Rpb25SYXJlRGF0YTo6b2Zmc2V0T2ZPYmplY3RBbGxv
Y2F0aW9uUHJvZmlsZSgpICsgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU6Om9mZnNldE9mSW5saW5l
Q2FwYWNpdHkoKSksIHNjcmF0Y2hSZWcpOwogICAgIGVtaXRJbml0aWFsaXplSW5saW5lU3RvcmFn
ZShyZXN1bHRSZWcsIHNjcmF0Y2hSZWcpOwogICAgIGFkZFNsb3dDYXNlKHNsb3dDYXNlcyk7Ci0g
ICAgZW1pdFN0b3JlQ2VsbChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCByZXN1bHRS
ZWcpOworICAgIGVtaXRTdG9yZUNlbGwoYnl0ZWNvZGUuZHN0Lm9mZnNldCgpLCByZXN1bHRSZWcp
OwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF90b190aGlzKGNvbnN0IEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BUb1RoaXM+KCk7CiAgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jayk7CkBAIC05ODYsMTcgKzEwNDIsMTkgQEAgdm9pZCBKSVQ6OmVtaXRf
b3BfdG9fdGhpcyhJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGFkZFNsb3dD
YXNlKGJyYW5jaFB0cihOb3RFcXVhbCwgcmVnVDAsIHJlZ1QyKSk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0X29wX2NoZWNrX3RkeihJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBK
SVQ6OmVtaXRfb3BfY2hlY2tfdGR6KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7Ci0gICAgZW1pdExvYWRUYWcoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwg
cmVnVDApOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wQ2hl
Y2tUZHo+KCk7CisgICAgZW1pdExvYWRUYWcoYnl0ZWNvZGUudGFyZ2V0Lm9mZnNldCgpLCByZWdU
MCk7CiAgICAgYWRkU2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMCkpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9oYXNfc3RydWN0dXJlX3Byb3BlcnR5KGNvbnN0
IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaW50IGRzdCA9IGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGludCBlbnVtZXJhdG9yID0gY3VycmVudEluc3RydWN0
aW9uWzRdLnUub3BlcmFuZDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9u
LT5hczxPcEhhc1N0cnVjdHVyZVByb3BlcnR5PigpOworICAgIGludCBkc3QgPSBieXRlY29kZS5k
c3Qub2Zmc2V0KCk7CisgICAgaW50IGJhc2UgPSBieXRlY29kZS5iYXNlLm9mZnNldCgpOworICAg
IGludCBlbnVtZXJhdG9yID0gYnl0ZWNvZGUuZW51bWVyYXRvci5vZmZzZXQoKTsKIAogICAgIGVt
aXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMCk7CiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKGJhc2UpOwpAQCAtMTAxMiw3ICsxMDcwLDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX3N0
cnVjdHVyZV9wcm9wZXJ0eShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogCiB2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVIYXNJbmRleGVkUHJvcGVydHkoQnlWYWxJbmZvKiBieVZhbElu
Zm8sIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcywgSklUQXJyYXlNb2RlIGFycmF5TW9k
ZSkKIHsKLSAgICBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uID0gJm1fY29kZUJsb2Nr
LT5pbnN0cnVjdGlvbnMoKVtieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXhdOworICAgIGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24gPSBtX2NvZGVCbG9jay0+aW5zdHJ1Y3Rpb25z
KCkuYXQoYnlWYWxJbmZvLT5ieXRlY29kZUluZGV4KS5wdHIoKTsKICAgICAKICAgICBQYXRjaGFi
bGVKdW1wIGJhZFR5cGU7CiAgICAgCkBAIC0xMDM3LDEyICsxMDk1LDE0IEBAIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZUhhc0luZGV4ZWRQcm9wZXJ0eShCeVZhbEluZm8qIGJ5VmFsSW5mbywgUmV0
dXJuQWRkcmVzc1B0CiAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGF0Y2hDYWxsKENvZGVMb2NhdGlv
bkNhbGw8Tm9QdHJUYWc+KE1hY3JvQXNzZW1ibGVyQ29kZVB0cjxOb1B0clRhZz4ocmV0dXJuQWRk
cmVzcykpLCBGdW5jdGlvblB0cjxPcGVyYXRpb25QdHJUYWc+KG9wZXJhdGlvbkhhc0luZGV4ZWRQ
cm9wZXJ0eUdlbmVyaWMpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfaGFzX2luZGV4ZWRfcHJv
cGVydHkoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29w
X2hhc19pbmRleGVkX3Byb3BlcnR5KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0g
ICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGludCBw
cm9wZXJ0eSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgQXJyYXlQcm9m
aWxlKiBwcm9maWxlID0gYXJyYXlQcm9maWxlRm9yPE9wSGFzSW5kZXhlZFByb3BlcnR5U2hhcGU+
KGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVj
dGlvbi0+YXM8T3BIYXNJbmRleGVkUHJvcGVydHk+KCk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRz
dC5vZmZzZXQoKTsKKyAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLmJhc2Uub2Zmc2V0KCk7CisgICAg
aW50IHByb3BlcnR5ID0gYnl0ZWNvZGUucHJvcGVydHkub2Zmc2V0KCk7CisgICAgQXJyYXlQcm9m
aWxlKiBwcm9maWxlID0gJm1ldGFkYXRhLmFycmF5UHJvZmlsZTsKICAgICBCeVZhbEluZm8qIGJ5
VmFsSW5mbyA9IG1fY29kZUJsb2NrLT5hZGRCeVZhbEluZm8oKTsKICAgICAKICAgICBlbWl0TG9h
ZFBheWxvYWQoYmFzZSwgcmVnVDApOwpAQCAtMTA4MSwxMyArMTE0MSwxNCBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogICAgIG1fYnlWYWxDb21waWxhdGlvbkluZm8uYXBwZW5kKEJ5VmFsQ29tcGlsYXRpb25J
bmZvKGJ5VmFsSW5mbywgbV9ieXRlY29kZU9mZnNldCwgUGF0Y2hhYmxlSnVtcCgpLCBiYWRUeXBl
LCBtb2RlLCBwcm9maWxlLCBkb25lLCBuZXh0SG90UGF0aCkpOwogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfaGFzX2luZGV4ZWRfcHJvcGVydHkoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjpl
bWl0U2xvd19vcF9oYXNfaW5kZXhlZF9wcm9wZXJ0eShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewog
ICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICBpbnQgZHN0ID0gY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQ7Ci0gICAgaW50IHByb3BlcnR5ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUu
b3BlcmFuZDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEhh
c0luZGV4ZWRQcm9wZXJ0eT4oKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgp
OworICAgIGludCBiYXNlID0gYnl0ZWNvZGUuYmFzZS5vZmZzZXQoKTsKKyAgICBpbnQgcHJvcGVy
dHkgPSBieXRlY29kZS5wcm9wZXJ0eS5vZmZzZXQoKTsKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5m
byA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5VmFs
SW5mbzsKIAogICAgIExhYmVsIHNsb3dQYXRoID0gbGFiZWwoKTsKQEAgLTExMDEsMTIgKzExNjIs
MTMgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2hhc19pbmRleGVkX3Byb3BlcnR5KEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3QKICAgICBtX2J5VmFsSW5zdHJ1Y3Rpb25JbmRl
eCsrOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1lKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZGlyZWN0X3BuYW1l
KGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaW50IGRzdCA9
IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IGJhc2UgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGludCBpbmRleCA9IGN1cnJlbnRJbnN0cnVj
dGlvbls0XS51Lm9wZXJhbmQ7Ci0gICAgaW50IGVudW1lcmF0b3IgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bNV0udS5vcGVyYW5kOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wR2V0RGlyZWN0UG5hbWU+KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZz
ZXQoKTsKKyAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLmJhc2Uub2Zmc2V0KCk7CisgICAgaW50IGlu
ZGV4ID0gYnl0ZWNvZGUuaW5kZXgub2Zmc2V0KCk7CisgICAgaW50IGVudW1lcmF0b3IgPSBieXRl
Y29kZS5lbnVtZXJhdG9yLm9mZnNldCgpOwogCiAgICAgLy8gQ2hlY2sgdGhhdCBiYXNlIGlzIGEg
Y2VsbAogICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMCk7CkBAIC0xMTM3LDE1ICsxMTk5
LDE2IEBAIHZvaWQgSklUOjplbWl0X29wX2dldF9kaXJlY3RfcG5hbWUoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKICAgICBsb2FkMzIoQmFzZUluZGV4KHJlZ1QwLCByZWdUMiwgVGlt
ZXNFaWdodCwgb2Zmc2V0T2ZGaXJzdFByb3BlcnR5ICsgT0JKRUNUX09GRlNFVE9GKEpTVmFsdWUs
IHUuYXNCaXRzLnBheWxvYWQpKSwgcmVnVDApOwogICAgIAogICAgIGRvbmUubGluayh0aGlzKTsK
LSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0
ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwogICAgIGVtaXRTdG9yZShkc3QsIHJl
Z1QxLCByZWdUMCk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3Jfc3RydWN0dXJl
X3BuYW1lKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6ZW1pdF9v
cF9lbnVtZXJhdG9yX3N0cnVjdHVyZV9wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogewotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kOwotICAgIGludCBlbnVtZXJhdG9yID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZDsKLSAgICBpbnQgaW5kZXggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAg
IGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvclN0cnVj
dHVyZVBuYW1lPigpOworICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7CisgICAg
aW50IGVudW1lcmF0b3IgPSBieXRlY29kZS5lbnVtZXJhdG9yLm9mZnNldCgpOworICAgIGludCBp
bmRleCA9IGJ5dGVjb2RlLmluZGV4Lm9mZnNldCgpOwogCiAgICAgZW1pdExvYWRQYXlsb2FkKGlu
ZGV4LCByZWdUMCk7CiAgICAgZW1pdExvYWRQYXlsb2FkKGVudW1lcmF0b3IsIHJlZ1QxKTsKQEAg
LTExNjUsMTEgKzEyMjgsMTIgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfZW51bWVyYXRvcl9zdHJ1Y3R1
cmVfcG5hbWUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBlbWl0U3RvcmUo
ZHN0LCByZWdUMiwgcmVnVDApOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9lbnVtZXJhdG9yX2dl
bmVyaWNfcG5hbWUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjpl
bWl0X29wX2VudW1lcmF0b3JfZ2VuZXJpY19wbmFtZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogewotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kOwotICAgIGludCBlbnVtZXJhdG9yID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3Bl
cmFuZDsKLSAgICBpbnQgaW5kZXggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwor
ICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wRW51bWVyYXRvckdl
bmVyaWNQbmFtZT4oKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOworICAg
IGludCBlbnVtZXJhdG9yID0gYnl0ZWNvZGUuZW51bWVyYXRvci5vZmZzZXQoKTsKKyAgICBpbnQg
aW5kZXggPSBieXRlY29kZS5pbmRleC5vZmZzZXQoKTsKIAogICAgIGVtaXRMb2FkUGF5bG9hZChp
bmRleCwgcmVnVDApOwogICAgIGVtaXRMb2FkUGF5bG9hZChlbnVtZXJhdG9yLCByZWdUMSk7CkBA
IC0xMTg5LDEwICsxMjUzLDEyIEBAIHZvaWQgSklUOjplbWl0X29wX2VudW1lcmF0b3JfZ2VuZXJp
Y19wbmFtZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGVtaXRTdG9yZShk
c3QsIHJlZ1QyLCByZWdUMCk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX3Byb2ZpbGVfdHlwZShJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmls
ZV90eXBlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAgVHlw
ZUxvY2F0aW9uKiBjYWNoZWRUeXBlTG9jYXRpb24gPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5s
b2NhdGlvbjsKLSAgICBpbnQgdmFsdWVUb1Byb2ZpbGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
UHJvZmlsZVR5cGU+KCk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YSht
X2NvZGVCbG9jayk7CisgICAgVHlwZUxvY2F0aW9uKiBjYWNoZWRUeXBlTG9jYXRpb24gPSBtZXRh
ZGF0YS50eXBlTG9jYXRpb247CisgICAgaW50IHZhbHVlVG9Qcm9maWxlID0gYnl0ZWNvZGUudGFy
Z2V0Lm9mZnNldCgpOwogCiAgICAgLy8gTG9hZCBwYXlsb2FkIGluIFQwLiBMb2FkIHRhZyBpbiBU
My4KICAgICBlbWl0TG9hZFBheWxvYWQodmFsdWVUb1Byb2ZpbGUsIHJlZ1QwKTsKQEAgLTEyNTQs
MzMgKzEzMjAsMzQgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHJvZmlsZV90eXBlKEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAganVtcFRvRW5kLmxpbmsodGhpcyk7CiB9CiAKLXZv
aWQgSklUOjplbWl0X29wX2xvZ19zaGFkb3dfY2hpY2tlbl9wcm9sb2d1ZShJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfbG9nX3NoYWRvd19jaGlja2Vu
X3Byb2xvZ3VlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7CiAgICAg
dXBkYXRlVG9wQ2FsbEZyYW1lKCk7CiAgICAgc3RhdGljX2Fzc2VydChub25BcmdHUFIwICE9IHJl
Z1QwICYmIG5vbkFyZ0dQUjAgIT0gcmVnVDIsICJ3ZSB3aWxsIGhhdmUgcHJvYmxlbXMgaWYgdGhp
cyBpcyB0cnVlLiIpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wTG9nU2hhZG93Q2hpY2tlblByb2xvZ3VlPigpOwogICAgIEdQUlJlZyBzaGFkb3dQYWNrZXRS
ZWcgPSByZWdUMDsKICAgICBHUFJSZWcgc2NyYXRjaDFSZWcgPSBub25BcmdHUFIwOyAvLyBUaGlz
IG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIuCiAgICAgR1BSUmVnIHNjcmF0Y2gyUmVn
ID0gcmVnVDI7CiAgICAgZW5zdXJlU2hhZG93Q2hpY2tlblBhY2tldCgqdm0oKSwgc2hhZG93UGFj
a2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOwogCiAgICAgc2NyYXRjaDFSZWcgPSBy
ZWdUNDsKLSAgICBlbWl0TG9hZFBheWxvYWQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZCwgcmVnVDMpOworICAgIGVtaXRMb2FkUGF5bG9hZChieXRlY29kZS5zY29wZS5vZmZzZXQoKSwg
cmVnVDMpOwogICAgIGxvZ1NoYWRvd0NoaWNrZW5Qcm9sb2d1ZVBhY2tldChzaGFkb3dQYWNrZXRS
ZWcsIHNjcmF0Y2gxUmVnLCByZWdUMyk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2xvZ19zaGFk
b3dfY2hpY2tlbl90YWlsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJ
VDo6ZW1pdF9vcF9sb2dfc2hhZG93X2NoaWNrZW5fdGFpbChjb25zdCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQogewogICAgIHVwZGF0ZVRvcENhbGxGcmFtZSgpOwogICAgIHN0YXRp
Y19hc3NlcnQobm9uQXJnR1BSMCAhPSByZWdUMCAmJiBub25BcmdHUFIwICE9IHJlZ1QyLCAid2Ug
d2lsbCBoYXZlIHByb2JsZW1zIGlmIHRoaXMgaXMgdHJ1ZS4iKTsKKyAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcExvZ1NoYWRvd0NoaWNrZW5UYWlsPigpOwogICAg
IEdQUlJlZyBzaGFkb3dQYWNrZXRSZWcgPSByZWdUMDsKICAgICBHUFJSZWcgc2NyYXRjaDFSZWcg
PSBub25BcmdHUFIwOyAvLyBUaGlzIG11c3QgYmUgYSBub24tYXJndW1lbnQgcmVnaXN0ZXIuCiAg
ICAgR1BSUmVnIHNjcmF0Y2gyUmVnID0gcmVnVDI7CiAgICAgZW5zdXJlU2hhZG93Q2hpY2tlblBh
Y2tldCgqdm0oKSwgc2hhZG93UGFja2V0UmVnLCBzY3JhdGNoMVJlZywgc2NyYXRjaDJSZWcpOwot
Ci0gICAgZW1pdExvYWRQYXlsb2FkKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIHJl
Z1QyKTsKLSAgICBlbWl0TG9hZFRhZyhjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBy
ZWdUMSk7CisgICAgZW1pdExvYWRQYXlsb2FkKGJ5dGVjb2RlLnRoaXNWYWx1ZS5vZmZzZXQoKSwg
cmVnVDIpOworICAgIGVtaXRMb2FkVGFnKGJ5dGVjb2RlLnRoaXNWYWx1ZS5vZmZzZXQoKSwgcmVn
VDEpOwogICAgIEpTVmFsdWVSZWdzIHRoaXNSZWdzKHJlZ1QxLCByZWdUMik7Ci0gICAgZW1pdExv
YWRQYXlsb2FkKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQsIHJlZ1QzKTsKKyAgICBl
bWl0TG9hZFBheWxvYWQoYnl0ZWNvZGUuc2NvcGUub2Zmc2V0KCksIHJlZ1QzKTsKICAgICBsb2dT
aGFkb3dDaGlja2VuVGFpbFBhY2tldChzaGFkb3dQYWNrZXRSZWcsIHRoaXNSZWdzLCByZWdUMywg
bV9jb2RlQmxvY2ssIENhbGxTaXRlSW5kZXgoY3VycmVudEluc3RydWN0aW9uKSk7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82
NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQu
Y3BwCmluZGV4IDkxMjZmNjk2MDdiYmIwNDUwODVhNjE5MTZjYmQ1NmMyOWJmNGE5NGIuLjQwYWM0
ZjNmYzY2ZTg1YmFmOWYyOWEzZDFhMzYzZWZhODgxZjA5MDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcApAQCAtNDcsNTAg
KzQ3LDU0IEBACiAKIG5hbWVzcGFjZSBKU0MgewogICAgIAotdm9pZCBKSVQ6OmVtaXRfb3BfcHV0
X2dldHRlcl9ieV9pZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6
OmVtaXRfb3BfcHV0X2dldHRlcl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogewotICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZDsKLSAgICBpbnQgcHJvcGVydHkgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwot
ICAgIGludCBvcHRpb25zID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICBp
bnQgZ2V0dGVyID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFuZDsKKyAgICBhdXRvIGJ5
dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlckJ5SWQ+KCk7CisgICAg
aW50IGJhc2UgPSBieXRlY29kZS5iYXNlLm9mZnNldCgpOworICAgIGludCBwcm9wZXJ0eSA9IGJ5
dGVjb2RlLnByb3BlcnR5OworICAgIGludCBvcHRpb25zID0gYnl0ZWNvZGUuYXR0cmlidXRlczsK
KyAgICBpbnQgZ2V0dGVyID0gYnl0ZWNvZGUuYWNjZXNzb3Iub2Zmc2V0KCk7CiAKICAgICBlbWl0
TG9hZFBheWxvYWQoYmFzZSwgcmVnVDEpOwogICAgIGVtaXRMb2FkUGF5bG9hZChnZXR0ZXIsIHJl
Z1QzKTsKICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvblB1dEdldHRlckJ5SWQsIHJlZ1QxLCBt
X2NvZGVCbG9jay0+aWRlbnRpZmllcihwcm9wZXJ0eSkuaW1wbCgpLCBvcHRpb25zLCByZWdUMyk7
CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX3B1dF9zZXR0ZXJfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBpbnQgYmFzZSA9IGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHByb3BlcnR5ID0gY3VycmVu
dEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICBpbnQgb3B0aW9ucyA9IGN1cnJlbnRJbnN0
cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHNldHRlciA9IGN1cnJlbnRJbnN0cnVjdGlv
bls0XS51Lm9wZXJhbmQ7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BQdXRTZXR0ZXJCeUlkPigpOworICAgIGludCBiYXNlID0gYnl0ZWNvZGUuYmFzZS5vZmZz
ZXQoKTsKKyAgICBpbnQgcHJvcGVydHkgPSBieXRlY29kZS5wcm9wZXJ0eTsKKyAgICBpbnQgb3B0
aW9ucyA9IGJ5dGVjb2RlLmF0dHJpYnV0ZXM7CisgICAgaW50IHNldHRlciA9IGJ5dGVjb2RlLmFj
Y2Vzc29yLm9mZnNldCgpOwogCiAgICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QxKTsKICAg
ICBlbWl0TG9hZFBheWxvYWQoc2V0dGVyLCByZWdUMyk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVy
YXRpb25QdXRTZXR0ZXJCeUlkLCByZWdUMSwgbV9jb2RlQmxvY2stPmlkZW50aWZpZXIocHJvcGVy
dHkpLmltcGwoKSwgb3B0aW9ucywgcmVnVDMpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9wdXRf
Z2V0dGVyX3NldHRlcl9ieV9pZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9p
ZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9zZXR0ZXJfYnlfaWQoY29uc3QgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlv
blsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHByb3BlcnR5ID0gY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZDsKLSAgICBpbnQgYXR0cmlidXRlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUu
b3BlcmFuZDsKLSAgICBpbnQgZ2V0dGVyID0gY3VycmVudEluc3RydWN0aW9uWzRdLnUub3BlcmFu
ZDsKLSAgICBpbnQgc2V0dGVyID0gY3VycmVudEluc3RydWN0aW9uWzVdLnUub3BlcmFuZDsKKyAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1dEdldHRlclNldHRl
ckJ5SWQ+KCk7CisgICAgaW50IGJhc2UgPSBieXRlY29kZS5iYXNlLm9mZnNldCgpOworICAgIGlu
dCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLnByb3BlcnR5OworICAgIGludCBhdHRyaWJ1dGVzID0gYnl0
ZWNvZGUuYXR0cmlidXRlczsKKyAgICBpbnQgZ2V0dGVyID0gYnl0ZWNvZGUuZ2V0dGVyLm9mZnNl
dCgpOworICAgIGludCBzZXR0ZXIgPSBieXRlY29kZS5zZXR0ZXIub2Zmc2V0KCk7CiAKICAgICBl
bWl0TG9hZFBheWxvYWQoYmFzZSwgcmVnVDEpOwogICAgIGVtaXRMb2FkUGF5bG9hZChnZXR0ZXIs
IHJlZ1QzKTsKICAgICBlbWl0TG9hZFBheWxvYWQoc2V0dGVyLCByZWdUNCk7Ci0gICAgY2FsbE9w
ZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIHJlZ1QxLCBtX2NvZGVCbG9jay0+aWRl
bnRpZmllcihwcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGUsIHJlZ1QzLCByZWdUNCk7CisgICAg
Y2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRHZXR0ZXJTZXR0ZXIsIHJlZ1QxLCBtX2NvZGVCbG9j
ay0+aWRlbnRpZmllcihwcm9wZXJ0eSkuaW1wbCgpLCBhdHRyaWJ1dGVzLCByZWdUMywgcmVnVDQp
OwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9wdXRfZ2V0dGVyX2J5X3ZhbChJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9ieV92YWwo
Y29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBpbnQgYmFzZSA9
IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHByb3BlcnR5ID0gY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICBpbnQzMl90IGF0dHJpYnV0ZXMgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgIGludCBnZXR0ZXIgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wUHV0R2V0dGVyQnlWYWw+KCk7CisgICAgaW50IGJhc2UgPSBieXRlY29k
ZS5iYXNlLm9mZnNldCgpOworICAgIGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLnByb3BlcnR5Lm9m
ZnNldCgpOworICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5dGVjb2RlLmF0dHJpYnV0ZXM7Cisg
ICAgaW50IGdldHRlciA9IGJ5dGVjb2RlLmFjY2Vzc29yLm9mZnNldCgpOwogCiAgICAgZW1pdExv
YWRQYXlsb2FkKGJhc2UsIHJlZ1QyKTsKICAgICBlbWl0TG9hZChwcm9wZXJ0eSwgcmVnVDEsIHJl
Z1QwKTsKQEAgLTk4LDQzICsxMDIsNDggQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2dldHRlcl9i
eV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBjYWxsT3BlcmF0aW9u
KG9wZXJhdGlvblB1dEdldHRlckJ5VmFsLCByZWdUMiwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1Qw
KSwgYXR0cmlidXRlcywgcmVnVDMpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9wdXRfc2V0dGVy
X2J5X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRf
b3BfcHV0X3NldHRlcl9ieV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKLSAgICBpbnQgYmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0g
ICAgaW50IHByb3BlcnR5ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICBp
bnQzMl90IGF0dHJpYnV0ZXMgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAg
IGludCBnZXR0ZXIgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOworICAgIGF1dG8g
Ynl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wUHV0U2V0dGVyQnlWYWw+KCk7Cisg
ICAgaW50IGJhc2UgPSBieXRlY29kZS5iYXNlLm9mZnNldCgpOworICAgIGludCBwcm9wZXJ0eSA9
IGJ5dGVjb2RlLnByb3BlcnR5Lm9mZnNldCgpOworICAgIGludDMyX3QgYXR0cmlidXRlcyA9IGJ5
dGVjb2RlLmF0dHJpYnV0ZXM7CisgICAgaW50IHNldHRlciA9IGJ5dGVjb2RlLmFjY2Vzc29yLm9m
ZnNldCgpOwogCiAgICAgZW1pdExvYWRQYXlsb2FkKGJhc2UsIHJlZ1QyKTsKICAgICBlbWl0TG9h
ZChwcm9wZXJ0eSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBlbWl0TG9hZFBheWxvYWQoZ2V0dGVyLCBy
ZWdUMyk7CisgICAgZW1pdExvYWRQYXlsb2FkKHNldHRlciwgcmVnVDMpOwogICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uUHV0U2V0dGVyQnlWYWwsIHJlZ1QyLCBKU1ZhbHVlUmVncyhyZWdUMSwg
cmVnVDApLCBhdHRyaWJ1dGVzLCByZWdUMyk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2RlbF9i
eV9pZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3Bf
ZGVsX2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiB7Ci0gICAg
aW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IGJhc2Ug
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGludCBwcm9wZXJ0eSA9IGN1
cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BEZWxCeUlkPigpOworICAgIGludCBkc3QgPSBieXRlY29kZS5k
c3Qub2Zmc2V0KCk7CisgICAgaW50IGJhc2UgPSBieXRlY29kZS5iYXNlLm9mZnNldCgpOworICAg
IGludCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLnByb3BlcnR5OwogICAgIGVtaXRMb2FkKGJhc2UsIHJl
Z1QxLCByZWdUMCk7CiAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25EZWxldGVCeUlkSlNSZXN1
bHQsIGRzdCwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgbV9jb2RlQmxvY2stPmlkZW50aWZp
ZXIocHJvcGVydHkpLmltcGwoKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2RlbF9ieV92YWwo
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX2RlbF9i
eV92YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBpbnQg
ZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgYmFzZSA9IGN1
cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHByb3BlcnR5ID0gY3VycmVu
dEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudElu
c3RydWN0aW9uLT5hczxPcERlbEJ5VmFsPigpOworICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qu
b2Zmc2V0KCk7CisgICAgaW50IGJhc2UgPSBieXRlY29kZS5iYXNlLm9mZnNldCgpOworICAgIGlu
dCBwcm9wZXJ0eSA9IGJ5dGVjb2RlLnByb3BlcnR5Lm9mZnNldCgpOwogICAgIGVtaXRMb2FkMihi
YXNlLCByZWdUMSwgcmVnVDAsIHByb3BlcnR5LCByZWdUMywgcmVnVDIpOwogICAgIGNhbGxPcGVy
YXRpb24ob3BlcmF0aW9uRGVsZXRlQnlWYWxKU1Jlc3VsdCwgZHN0LCBKU1ZhbHVlUmVncyhyZWdU
MSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUMywgcmVnVDIpKTsKIH0KIAotdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2J5X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBK
SVQ6OmVtaXRfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uKQogewotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwot
ICAgIGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICBpbnQg
cHJvcGVydHkgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgIEFycmF5UHJv
ZmlsZSogcHJvZmlsZSA9IGFycmF5UHJvZmlsZUZvcjxPcEdldEJ5VmFsU2hhcGU+KGN1cnJlbnRJ
bnN0cnVjdGlvbik7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8
T3BHZXRCeVZhbD4oKTsKKyAgICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1f
Y29kZUJsb2NrKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOworICAgIGlu
dCBiYXNlID0gYnl0ZWNvZGUuYmFzZS5vZmZzZXQoKTsKKyAgICBpbnQgcHJvcGVydHkgPSBieXRl
Y29kZS5wcm9wZXJ0eS5vZmZzZXQoKTsKKyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0
YWRhdGEuYXJyYXlQcm9maWxlOwogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9jb2RlQmxv
Y2stPmFkZEJ5VmFsSW5mbygpOwogCiAgICAgZW1pdExvYWQyKGJhc2UsIHJlZ1QxLCByZWdUMCwg
cHJvcGVydHksIHJlZ1QzLCByZWdUMik7CkBAIC0xNzcsNyArMTg2LDcgQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfZ2V0X2J5X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgICAg
ICByZXN1bHRPSy5saW5rKHRoaXMpOwogICAgIH0KIAotICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1Np
dGUoKTsKKyAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29k
ZUJsb2NrKSk7CiAgICAgZW1pdFN0b3JlKGRzdCwgcmVnVDEsIHJlZ1QwKTsKIAogICAgIExhYmVs
IG5leHRIb3RQYXRoID0gbGFiZWwoKTsKQEAgLTE4NSwxNyArMTk0LDE4IEBAIHZvaWQgSklUOjpl
bWl0X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBt
X2J5VmFsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbElu
Zm8sIG1fYnl0ZWNvZGVPZmZzZXQsIG5vdEluZGV4LCBiYWRUeXBlLCBtb2RlLCBwcm9maWxlLCBk
b25lLCBuZXh0SG90UGF0aCkpOwogfQogCi1KSVRHZXRCeUlkR2VuZXJhdG9yIEpJVDo6ZW1pdEdl
dEJ5VmFsV2l0aENhY2hlZElkKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEp1bXAmIGZh
c3REb25lQ2FzZSwgSnVtcCYgc2xvd0RvbmVDYXNlLCBKdW1wTGlzdCYgc2xvd0Nhc2VzKQorSklU
R2V0QnlJZEdlbmVyYXRvciBKSVQ6OmVtaXRHZXRCeVZhbFdpdGhDYWNoZWRJZChCeVZhbEluZm8q
IGJ5VmFsSW5mbywgT3BHZXRCeVZhbCBieXRlY29kZSwgY29uc3QgSWRlbnRpZmllciYgcHJvcGVy
dHlOYW1lLCBKdW1wJiBmYXN0RG9uZUNhc2UsIEp1bXAmIHNsb3dEb25lQ2FzZSwgSnVtcExpc3Qm
IHNsb3dDYXNlcykKIHsKLSAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZDsKLQogICAgIC8vIGJhc2U6IHRhZyhyZWdUMSksIHBheWxvYWQocmVnVDApCiAgICAgLy8g
cHJvcGVydHk6IHRhZyhyZWdUMyksIHBheWxvYWQocmVnVDIpCiAgICAgLy8gc2NyYXRjaDogcmVn
VDQKIAorICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7CisKICAgICBzbG93Q2Fz
ZXMuYXBwZW5kKGJyYW5jaElmTm90Q2VsbChyZWdUMykpOwogICAgIGVtaXRCeVZhbElkZW50aWZp
ZXJDaGVjayhieVZhbEluZm8sIHJlZ1QyLCByZWdUNCwgcHJvcGVydHlOYW1lLCBzbG93Q2FzZXMp
OwogCisgICAgY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiA9IG1fY29kZUJs
b2NrLT5pbnN0cnVjdGlvbnMoKS5hdChieVZhbEluZm8tPmJ5dGVjb2RlSW5kZXgpLnB0cigpOwog
ICAgIEpJVEdldEJ5SWRHZW5lcmF0b3IgZ2VuKAogICAgICAgICBtX2NvZGVCbG9jaywgQ29kZU9y
aWdpbihtX2J5dGVjb2RlT2Zmc2V0KSwgQ2FsbFNpdGVJbmRleChjdXJyZW50SW5zdHJ1Y3Rpb24p
LCBSZWdpc3RlclNldDo6c3R1YlVuYXZhaWxhYmxlUmVnaXN0ZXJzKCksCiAgICAgICAgIHByb3Bl
cnR5TmFtZS5pbXBsKCksIEpTVmFsdWVSZWdzOjpwYXlsb2FkT25seShyZWdUMCksIEpTVmFsdWVS
ZWdzKHJlZ1QxLCByZWdUMCksIEFjY2Vzc1R5cGU6OkdldCk7CkBAIC0yMDYsMTggKzIxNiwxOSBA
QCBKSVRHZXRCeUlkR2VuZXJhdG9yIEpJVDo6ZW1pdEdldEJ5VmFsV2l0aENhY2hlZElkKEJ5VmFs
SW5mbyogYnlWYWxJbmZvLCBJbnN0cnVjdAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJl
bCgpOwogICAgIGdlbi5zbG93UGF0aEp1bXAoKS5saW5rKHRoaXMpOwogCi0gICAgQ2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgZHN0
LCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgcHJvcGVydHlOYW1l
LmltcGwoKSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVj
b2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCBkc3Qs
IGdlbi5zdHViSW5mbygpLCBKU1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBwcm9wZXJ0eU5hbWUu
aW1wbCgpKTsKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVnaW4sIGNhbGwp
OwogICAgIHNsb3dEb25lQ2FzZSA9IGp1bXAoKTsKIAogICAgIHJldHVybiBnZW47CiB9CiAKLXZv
aWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfdmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewotICAgIGludCBk
c3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBiYXNlID0gY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICBpbnQgcHJvcGVydHkgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5z
dHJ1Y3Rpb24tPmFzPE9wR2V0QnlWYWw+KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5v
ZmZzZXQoKTsKKyAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLmJhc2Uub2Zmc2V0KCk7CisgICAgaW50
IHByb3BlcnR5ID0gYnl0ZWNvZGUucHJvcGVydHkub2Zmc2V0KCk7CiAgICAgQnlWYWxJbmZvKiBi
eVZhbEluZm8gPSBtX2J5VmFsQ29tcGlsYXRpb25JbmZvW21fYnlWYWxJbnN0cnVjdGlvbkluZGV4
XS5ieVZhbEluZm87CiAKICAgICBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyLCBiYXNlKTsg
Ly8gYmFzZSBjZWxsIGNoZWNrCkBAIC0yMjksNyArMjQwLDcgQEAgdm9pZCBKSVQ6OmVtaXRTbG93
X29wX2dldF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNs
b3dDYXMKICAgICBlbWl0TmFrZWRDYWxsKENvZGVMb2NhdGlvbkxhYmVsPE5vUHRyVGFnPihtX3Zt
LT5nZXRDVElTdHViKHN0cmluZ0dldEJ5VmFsR2VuZXJhdG9yKS5yZXRhZ2dlZENvZGU8Tm9QdHJU
YWc+KCkpKTsKICAgICBKdW1wIGZhaWxlZCA9IGJyYW5jaFRlc3RQdHIoWmVybywgcmVnVDApOwog
ICAgIGVtaXRTdG9yZUNlbGwoZHN0LCByZWdUMCk7Ci0gICAgZW1pdEp1bXBTbG93VG9Ib3QoanVt
cCgpLCBPUENPREVfTEVOR1RIKG9wX2dldF9ieV92YWwpKTsKKyAgICBlbWl0SnVtcFNsb3dUb0hv
dChqdW1wKCksIGN1cnJlbnRJbnN0cnVjdGlvbi0+c2l6ZSgpKTsKICAgICBmYWlsZWQubGluayh0
aGlzKTsKICAgICBub3RTdHJpbmcubGluayh0aGlzKTsKICAgICBub25DZWxsLmxpbmsodGhpcyk7
CkBAIC0yNDcsMTQgKzI1OCwyMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0X2J5X3ZhbChJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0NhcwogICAgIG1fYnlW
YWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLnJldHVybkFkZHJlc3Mg
PSBjYWxsOwogICAgIG1fYnlWYWxJbnN0cnVjdGlvbkluZGV4Kys7CiAKLSAgICBlbWl0VmFsdWVQ
cm9maWxpbmdTaXRlKCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRh
ZGF0YShtX2NvZGVCbG9jaykpOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsX2Rp
cmVjdChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGVtaXRf
b3BfcHV0X2J5X3ZhbDxPcFB1dEJ5VmFsRGlyZWN0PihjdXJyZW50SW5zdHJ1Y3Rpb24pOwogfQog
Ci12b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfdmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCit0ZW1wbGF0ZTx0eXBlbmFtZSBPcD4KK3ZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92
YWwoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBpbnQgYmFz
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHByb3BlcnR5ID0g
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICBBcnJheVByb2ZpbGUqIHByb2Zp
bGUgPSBhcnJheVByb2ZpbGVGb3I8T3BQdXRCeVZhbFNoYXBlPihjdXJyZW50SW5zdHJ1Y3Rpb24p
OworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9wPigpOworICAg
IGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGlu
dCBiYXNlID0gYnl0ZWNvZGUuYmFzZS5vZmZzZXQoKTsKKyAgICBpbnQgcHJvcGVydHkgPSBieXRl
Y29kZS5wcm9wZXJ0eS5vZmZzZXQoKTsKKyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0
YWRhdGEuYXJyYXlQcm9maWxlOwogICAgIEJ5VmFsSW5mbyogYnlWYWxJbmZvID0gbV9jb2RlQmxv
Y2stPmFkZEJ5VmFsSW5mbygpOwogICAgIAogICAgIGVtaXRMb2FkMihiYXNlLCByZWdUMSwgcmVn
VDAsIHByb3BlcnR5LCByZWdUMywgcmVnVDIpOwpAQCAtMjc0LDE2ICsyOTMsMTYgQEAgdm9pZCBK
SVQ6OmVtaXRfb3BfcHV0X2J5X3ZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQog
ICAgIEpJVEFycmF5TW9kZSBtb2RlID0gY2hvb3NlQXJyYXlNb2RlKHByb2ZpbGUpOwogICAgIHN3
aXRjaCAobW9kZSkgewogICAgIGNhc2UgSklUSW50MzI6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVt
aXRJbnQzMlB1dEJ5VmFsKGN1cnJlbnRJbnN0cnVjdGlvbiwgYmFkVHlwZSk7CisgICAgICAgIHNs
b3dDYXNlcyA9IGVtaXRJbnQzMlB1dEJ5VmFsKGJ5dGVjb2RlLCBiYWRUeXBlKTsKICAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBKSVREb3VibGU6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXREb3Vi
bGVQdXRCeVZhbChjdXJyZW50SW5zdHJ1Y3Rpb24sIGJhZFR5cGUpOworICAgICAgICBzbG93Q2Fz
ZXMgPSBlbWl0RG91YmxlUHV0QnlWYWwoYnl0ZWNvZGUsIGJhZFR5cGUpOwogICAgICAgICBicmVh
azsKICAgICBjYXNlIEpJVENvbnRpZ3VvdXM6Ci0gICAgICAgIHNsb3dDYXNlcyA9IGVtaXRDb250
aWd1b3VzUHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsKKyAgICAgICAgc2xv
d0Nhc2VzID0gZW1pdENvbnRpZ3VvdXNQdXRCeVZhbChieXRlY29kZSwgYmFkVHlwZSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgSklUQXJyYXlTdG9yYWdlOgotICAgICAgICBzbG93Q2FzZXMg
PSBlbWl0QXJyYXlTdG9yYWdlUHV0QnlWYWwoY3VycmVudEluc3RydWN0aW9uLCBiYWRUeXBlKTsK
KyAgICAgICAgc2xvd0Nhc2VzID0gZW1pdEFycmF5U3RvcmFnZVB1dEJ5VmFsKGJ5dGVjb2RlLCBi
YWRUeXBlKTsKICAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgQ1JBU0goKTsK
QEAgLTI5OCwxMSArMzE3LDEzIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF9ieV92YWwoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBtX2J5VmFsQ29tcGlsYXRpb25JbmZvLmFw
cGVuZChCeVZhbENvbXBpbGF0aW9uSW5mbyhieVZhbEluZm8sIG1fYnl0ZWNvZGVPZmZzZXQsIG5v
dEluZGV4LCBiYWRUeXBlLCBtb2RlLCBwcm9maWxlLCBkb25lLCBkb25lKSk7CiB9CiAKLUpJVDo6
SnVtcExpc3QgSklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbChJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlLCBJbmRleGluZ1R5cGUg
aW5kZXhpbmdTaGFwZSkKK3RlbXBsYXRlIDx0eXBlbmFtZSBPcD4KK0pJVDo6SnVtcExpc3QgSklU
OjplbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVt
cCYgYmFkVHlwZSwgSW5kZXhpbmdUeXBlIGluZGV4aW5nU2hhcGUpCiB7Ci0gICAgaW50IGJhc2Ug
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCB2YWx1ZSA9IGN1cnJl
bnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0g
YXJyYXlQcm9maWxlRm9yPE9wUHV0QnlWYWxTaGFwZT4oY3VycmVudEluc3RydWN0aW9uKTsKKyAg
ICBhdXRvJiBtZXRhZGF0YSA9IGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKTsKKyAgICBp
bnQgYmFzZSA9IGJ5dGVjb2RlLmJhc2Uub2Zmc2V0KCk7CisgICAgaW50IHZhbHVlID0gYnl0ZWNv
ZGUudmFsdWUub2Zmc2V0KCk7CisgICAgQXJyYXlQcm9maWxlKiBwcm9maWxlID0gJm1ldGFkYXRh
LmFycmF5UHJvZmlsZTsKIAogICAgIEp1bXBMaXN0IHNsb3dDYXNlczsKICAgICAKQEAgLTM1Nywx
MSArMzc4LDEzIEBAIEpJVDo6SnVtcExpc3QgSklUOjplbWl0R2VuZXJpY0NvbnRpZ3VvdXNQdXRC
eVZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uCiAgICAgcmV0dXJuIHNsb3dDYXNl
czsKIH0KIAotSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRBcnJheVN0b3JhZ2VQdXRCeVZhbChJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQYXRjaGFibGVKdW1wJiBiYWRUeXBlKQordGVt
cGxhdGUgPHR5cGVuYW1lIE9wPgorSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRBcnJheVN0b3JhZ2VQ
dXRCeVZhbChPcCBieXRlY29kZSwgUGF0Y2hhYmxlSnVtcCYgYmFkVHlwZSkKIHsKLSAgICBpbnQg
YmFzZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHZhbHVlID0g
Y3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKLSAgICBBcnJheVByb2ZpbGUqIHByb2Zp
bGUgPSBhcnJheVByb2ZpbGVGb3I8T3BQdXRCeVZhbFNoYXBlPihjdXJyZW50SW5zdHJ1Y3Rpb24p
OworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOwor
ICAgIGludCBiYXNlID0gYnl0ZWNvZGUuYmFzZS5vZmZzZXQoKTsKKyAgICBpbnQgdmFsdWUgPSBi
eXRlY29kZS52YWx1ZS5vZmZzZXQoKTsKKyAgICBBcnJheVByb2ZpbGUqIHByb2ZpbGUgPSAmbWV0
YWRhdGEuYXJyYXlQcm9maWxlOwogCiAgICAgSnVtcExpc3Qgc2xvd0Nhc2VzOwogICAgIApAQCAt
Mzk0LDEzICs0MTcsMTQgQEAgSklUOjpKdW1wTGlzdCBKSVQ6OmVtaXRBcnJheVN0b3JhZ2VQdXRC
eVZhbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBQYXQKICAgICByZXR1cm4gc2xv
d0Nhc2VzOwogfQogCi1KSVRQdXRCeUlkR2VuZXJhdG9yIEpJVDo6ZW1pdFB1dEJ5VmFsV2l0aENh
Y2hlZElkKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBQdXRLaW5kIHB1dEtpbmQsIGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSnVt
cExpc3QmIGRvbmVDYXNlcywgSnVtcExpc3QmIHNsb3dDYXNlcykKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBPcD4KK0pJVFB1dEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0UHV0QnlWYWxXaXRoQ2FjaGVkSWQo
QnlWYWxJbmZvKiBieVZhbEluZm8sIE9wIGJ5dGVjb2RlLCBQdXRLaW5kIHB1dEtpbmQsIGNvbnN0
IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSnVtcExpc3QmIGRvbmVDYXNlcywgSnVtcExpc3Qm
IHNsb3dDYXNlcykKIHsKICAgICAvLyBiYXNlOiB0YWcocmVnVDEpLCBwYXlsb2FkKHJlZ1QwKQog
ICAgIC8vIHByb3BlcnR5OiB0YWcocmVnVDMpLCBwYXlsb2FkKHJlZ1QyKQogCi0gICAgaW50IGJh
c2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCB2YWx1ZSA9IGN1
cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgaW50IGJhc2UgPSBieXRlY29kZS5i
YXNlLm9mZnNldCgpOworICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLnZhbHVlLm9mZnNldCgpOwog
CiAgICAgc2xvd0Nhc2VzLmFwcGVuZChicmFuY2hJZk5vdENlbGwocmVnVDMpKTsKICAgICBlbWl0
QnlWYWxJZGVudGlmaWVyQ2hlY2soYnlWYWxJbmZvLCByZWdUMiwgcmVnVDIsIHByb3BlcnR5TmFt
ZSwgc2xvd0Nhc2VzKTsKQEAgLTQxMSw2ICs0MzUsNyBAQCBKSVRQdXRCeUlkR2VuZXJhdG9yIEpJ
VDo6ZW1pdFB1dEJ5VmFsV2l0aENhY2hlZElkKEJ5VmFsSW5mbyogYnlWYWxJbmZvLCBJbnN0cnVj
dAogICAgIGVtaXRMb2FkUGF5bG9hZChiYXNlLCByZWdUMCk7CiAgICAgZW1pdExvYWQodmFsdWUs
IHJlZ1QzLCByZWdUMik7CiAKKyAgICBjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uID0gbV9jb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmF0KGJ5VmFsSW5mby0+Ynl0ZWNvZGVJ
bmRleCkucHRyKCk7CiAgICAgSklUUHV0QnlJZEdlbmVyYXRvciBnZW4oCiAgICAgICAgIG1fY29k
ZUJsb2NrLCBDb2RlT3JpZ2luKG1fYnl0ZWNvZGVPZmZzZXQpLCBDYWxsU2l0ZUluZGV4KGN1cnJl
bnRJbnN0cnVjdGlvbiksIFJlZ2lzdGVyU2V0OjpzdHViVW5hdmFpbGFibGVSZWdpc3RlcnMoKSwK
ICAgICAgICAgSlNWYWx1ZVJlZ3M6OnBheWxvYWRPbmx5KHJlZ1QwKSwgSlNWYWx1ZVJlZ3MocmVn
VDMsIHJlZ1QyKSwgcmVnVDEsIG1fY29kZUJsb2NrLT5lY21hTW9kZSgpLCBwdXRLaW5kKTsKQEAg
LTQzMCwxOCArNDU1LDI5IEBAIEpJVFB1dEJ5SWRHZW5lcmF0b3IgSklUOjplbWl0UHV0QnlWYWxX
aXRoQ2FjaGVkSWQoQnlWYWxJbmZvKiBieVZhbEluZm8sIEluc3RydWN0CiAgICAgcmV0dXJuIGdl
bjsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
K3ZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfdmFsKGNvbnN0IEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7
Ci0gICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGlu
dCBwcm9wZXJ0eSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHZh
bHVlID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBib29sIGlzRGlyZWN0
ID0gY3VycmVudEluc3RydWN0aW9uLT5vcGNvZGVJRCgpID09IG9wX3B1dF9ieV92YWxfZGlyZWN0
OworICAgIGludCBiYXNlOworICAgIGludCBwcm9wZXJ0eTsKKyAgICBpbnQgdmFsdWU7CisKKyAg
ICBhdXRvIGxvYWQgPSBbJl0oYXV0byBieXRlY29kZSkgeworICAgICAgICBiYXNlID0gYnl0ZWNv
ZGUuYmFzZS5vZmZzZXQoKTsKKyAgICAgICAgcHJvcGVydHkgPSBieXRlY29kZS5wcm9wZXJ0eS5v
ZmZzZXQoKTsKKyAgICAgICAgdmFsdWUgPSBieXRlY29kZS52YWx1ZS5vZmZzZXQoKTsKKyAgICB9
OworCisgICAgaWYgKGlzRGlyZWN0KQorICAgICAgICBsb2FkKGN1cnJlbnRJbnN0cnVjdGlvbi0+
YXM8T3BQdXRCeVZhbERpcmVjdD4oKSk7CisgICAgZWxzZQorICAgICAgICBsb2FkKGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BQdXRCeVZhbD4oKSk7CisKICAgICBCeVZhbEluZm8qIGJ5VmFsSW5m
byA9IG1fYnlWYWxDb21waWxhdGlvbkluZm9bbV9ieVZhbEluc3RydWN0aW9uSW5kZXhdLmJ5VmFs
SW5mbzsKICAgICAKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogICAgIExhYmVsIHNsb3dQ
YXRoID0gbGFiZWwoKTsKICAgICAKLSAgICBib29sIGlzRGlyZWN0ID0gSW50ZXJwcmV0ZXI6Omdl
dE9wY29kZUlEKGN1cnJlbnRJbnN0cnVjdGlvbi0+dS5vcGNvZGUpID09IG9wX3B1dF9ieV92YWxf
ZGlyZWN0OwotCiAgICAgLy8gVGhlIHJlZ2lzdGVyIHNlbGVjdGlvbiBiZWxvdyBpcyBjaG9zZW4g
dG8gcmVkdWNlIHJlZ2lzdGVyIHN3YXBwaW5nIG9uIEFSTS4KICAgICAvLyBTd2FwcGluZyBzaG91
bGRuJ3QgaGFwcGVuIG9uIG90aGVyIHBsYXRmb3Jtcy4KICAgICBlbWl0TG9hZChiYXNlLCByZWdU
MiwgcmVnVDEpOwpAQCAtNDU0LDExICs0OTAsMTIgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1
dF9ieV92YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXMK
ICAgICBtX2J5VmFsSW5zdHJ1Y3Rpb25JbmRleCsrOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF90
cnlfZ2V0X2J5X2lkKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6
ZW1pdF9vcF90cnlfZ2V0X2J5X2lkKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiB7Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7Ci0g
ICAgaW50IGJhc2UgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGNvbnN0
IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihjdXJyZW50SW5z
dHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BUcnlHZXRCeUlkPigpOworICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qu
b2Zmc2V0KCk7CisgICAgaW50IGJhc2UgPSBieXRlY29kZS5iYXNlLm9mZnNldCgpOworICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29k
ZS5wcm9wZXJ0eSkpOwogCiAgICAgZW1pdExvYWQoYmFzZSwgcmVnVDEsIHJlZ1QwKTsKICAgICBl
bWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwpAQCAtNDcwLDE2ICs1MDcs
MTcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfdHJ5X2dldF9ieV9pZChJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQogICAgIGFkZFNsb3dDYXNlKGdlbi5zbG93UGF0aEp1bXAoKSk7CiAgICAg
bV9nZXRCeUlkcy5hcHBlbmQoZ2VuKTsKICAgICAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRl
KCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVC
bG9jaykpOwogICAgIGVtaXRTdG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7CiB9CiAKLXZvaWQgSklU
OjplbWl0U2xvd19vcF90cnlfZ2V0X2J5X2lkKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfdHJ5X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0
aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGxpbmtB
bGxTbG93Q2FzZXMoaXRlcik7CiAKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQ7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29k
ZUJsb2NrLT5pZGVudGlmaWVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKTsKKyAg
ICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFRyeUdldEJ5SWQ+KCk7
CisgICAgaW50IHJlc3VsdFZSZWcgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7CisgICAgY29uc3Qg
SWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLnBy
b3BlcnR5KSk7CiAKICAgICBKSVRHZXRCeUlkR2VuZXJhdG9yJiBnZW4gPSBtX2dldEJ5SWRzW21f
Z2V0QnlJZEluZGV4KytdOwogCkBAIC00OTEsMTEgKzUyOSwxMiBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfdHJ5X2dldF9ieV9pZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0
b3I8U2xvdwogfQogCiAKLXZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9kaXJlY3QoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX2dldF9ieV9pZF9k
aXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBpbnQg
ZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgYmFzZSA9IGN1
cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRl
bnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9w
ZXJhbmQpKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdl
dEJ5SWREaXJlY3Q+KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKKyAg
ICBpbnQgYmFzZSA9IGJ5dGVjb2RlLmJhc2Uub2Zmc2V0KCk7CisgICAgY29uc3QgSWRlbnRpZmll
ciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVyKGJ5dGVjb2RlLnByb3BlcnR5KSk7
CiAKICAgICBlbWl0TG9hZChiYXNlLCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRKdW1wU2xvd0Nh
c2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7CkBAIC01MDcsMzIgKzU0NiwzNCBAQCB2b2lkIEpJ
VDo6ZW1pdF9vcF9nZXRfYnlfaWRfZGlyZWN0KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24pCiAgICAgYWRkU2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRz
LmFwcGVuZChnZW4pOwogCi0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOworICAgIGVtaXRW
YWx1ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKICAgICBl
bWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
Z2V0X2J5X2lkX2RpcmVjdChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX2dl
dF9ieV9pZF9kaXJlY3QoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBsaW5rQWxsU2xvd0Nh
c2VzKGl0ZXIpOwogCi0gICAgaW50IHJlc3VsdFZSZWcgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+
aWRlbnRpZmllcihjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7CisgICAgYXV0byBi
eXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkRGlyZWN0PigpOworICAg
IGludCByZXN1bHRWUmVnID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOworICAgIGNvbnN0IElkZW50
aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5wcm9wZXJ0
eSkpOwogCiAgICAgSklUR2V0QnlJZEdlbmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5
SWRJbmRleCsrXTsKIAogICAgIExhYmVsIGNvbGRQYXRoQmVnaW4gPSBsYWJlbCgpOwogCi0gICAg
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKG9wZXJhdGlvbkdldEJ5SWREaXJl
Y3RPcHRpbWl6ZSwgcmVzdWx0VlJlZywgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdzKHJlZ1Qx
LCByZWdUMCksIGlkZW50LT5pbXBsKCkpOworICAgIENhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb25X
aXRoUHJvZmlsZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayksIG9wZXJhdGlvbkdldEJ5
SWREaXJlY3RPcHRpbWl6ZSwgcmVzdWx0VlJlZywgZ2VuLnN0dWJJbmZvKCksIEpTVmFsdWVSZWdz
KHJlZ1QxLCByZWdUMCksIGlkZW50LT5pbXBsKCkpOwogCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRo
Q2FsbChjb2xkUGF0aEJlZ2luLCBjYWxsKTsKIH0KIAogCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
YnlfaWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29w
X2dldF9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAg
IGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBiYXNl
ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoY3VycmVudEluc3RydWN0aW9uWzNd
LnUub3BlcmFuZCkpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFz
PE9wR2V0QnlJZD4oKTsKKyAgICBpbnQgZHN0ID0gYnl0ZWNvZGUuZHN0Lm9mZnNldCgpOworICAg
IGludCBiYXNlID0gYnl0ZWNvZGUuYmFzZS5vZmZzZXQoKTsKKyAgICBjb25zdCBJZGVudGlmaWVy
KiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUucHJvcGVydHkpKTsK
ICAgICAKICAgICBlbWl0TG9hZChiYXNlLCByZWdUMSwgcmVnVDApOwogICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChiYXNlLCByZWdUMSk7CkBAIC01NDcsMzIgKzU4OCwzNCBAQCB2b2lk
IEpJVDo6ZW1pdF9vcF9nZXRfYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
ICAgICBhZGRTbG93Q2FzZShnZW4uc2xvd1BhdGhKdW1wKCkpOwogICAgIG1fZ2V0QnlJZHMuYXBw
ZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7CisgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwogICAgIGVtaXRT
dG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRf
YnlfaWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50
cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfYnlfaWQoY29u
c3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBsaW5rQWxsU2xvd0Nhc2VzKGl0ZXIpOwogCi0gICAg
aW50IHJlc3VsdFZSZWcgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGNv
bnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihjdXJyZW50
SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlkPigpOworICAgIGludCByZXN1bHRWUmVnID0gYnl0ZWNv
ZGUuZHN0Lm9mZnNldCgpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVC
bG9jay0+aWRlbnRpZmllcihieXRlY29kZS5wcm9wZXJ0eSkpOwogCiAgICAgSklUR2V0QnlJZEdl
bmVyYXRvciYgZ2VuID0gbV9nZXRCeUlkc1ttX2dldEJ5SWRJbmRleCsrXTsKICAgICAKICAgICBM
YWJlbCBjb2xkUGF0aEJlZ2luID0gbGFiZWwoKTsKICAgICAKLSAgICBDYWxsIGNhbGwgPSBjYWxs
T3BlcmF0aW9uV2l0aFByb2ZpbGUob3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVn
LCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgaWRlbnQtPmltcGwo
KSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1l
dGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHRWUmVn
LCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgaWRlbnQtPmltcGwo
KSk7CiAgICAgCiAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChjb2xkUGF0aEJlZ2luLCBjYWxs
KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhfdGhpcyhJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfZ2V0X2J5X2lkX3dpdGhf
dGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGludCBk
c3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBiYXNlID0gY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICBpbnQgdGhpc1ZSZWcgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5k
KSk7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BHZXRCeUlk
V2l0aFRoaXM+KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKKyAgICBp
bnQgYmFzZSA9IGJ5dGVjb2RlLmJhc2Uub2Zmc2V0KCk7CisgICAgaW50IHRoaXNWUmVnID0gYnl0
ZWNvZGUudGhpc1ZhbHVlLm9mZnNldCgpOworICAgIGNvbnN0IElkZW50aWZpZXIqIGlkZW50ID0g
JihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5wcm9wZXJ0eSkpOwogICAgIAogICAg
IGVtaXRMb2FkKGJhc2UsIHJlZ1QxLCByZWdUMCk7CiAgICAgZW1pdExvYWQodGhpc1ZSZWcsIHJl
Z1Q0LCByZWdUMyk7CkBAIC01ODYsMzUgKzYyOSwzOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9nZXRf
YnlfaWRfd2l0aF90aGlzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgYWRk
U2xvd0Nhc2UoZ2VuLnNsb3dQYXRoSnVtcCgpKTsKICAgICBtX2dldEJ5SWRzV2l0aFRoaXMuYXBw
ZW5kKGdlbik7CiAKLSAgICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7CisgICAgZW1pdFZhbHVl
UHJvZmlsaW5nU2l0ZShieXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwogICAgIGVtaXRT
dG9yZShkc3QsIHJlZ1QxLCByZWdUMCk7CiB9CiAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRf
YnlfaWRfd2l0aF90aGlzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxT
bG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2J5X2lkX3dpdGhfdGhpcyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGxpbmtBbGxTbG93
Q2FzZXMoaXRlcik7CiAKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQ7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2Nr
LT5pZGVudGlmaWVyKGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQpKTsKKyAgICBhdXRv
IGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEdldEJ5SWRXaXRoVGhpcz4oKTsK
KyAgICBpbnQgcmVzdWx0VlJlZyA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKKyAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUucHJv
cGVydHkpKTsKIAogICAgIEpJVEdldEJ5SWRXaXRoVGhpc0dlbmVyYXRvciYgZ2VuID0gbV9nZXRC
eUlkc1dpdGhUaGlzW21fZ2V0QnlJZFdpdGhUaGlzSW5kZXgrK107CiAgICAgCiAgICAgTGFiZWwg
Y29sZFBhdGhCZWdpbiA9IGxhYmVsKCk7CiAgICAgCi0gICAgQ2FsbCBjYWxsID0gY2FsbE9wZXJh
dGlvbldpdGhQcm9maWxlKG9wZXJhdGlvbkdldEJ5SWRXaXRoVGhpc09wdGltaXplLCByZXN1bHRW
UmVnLCBnZW4uc3R1YkluZm8oKSwgSlNWYWx1ZVJlZ3MocmVnVDEsIHJlZ1QwKSwgSlNWYWx1ZVJl
Z3MocmVnVDQsIHJlZ1QzKSwgaWRlbnQtPmltcGwoKSk7CisgICAgQ2FsbCBjYWxsID0gY2FsbE9w
ZXJhdGlvbldpdGhQcm9maWxlKGJ5dGVjb2RlLm1ldGFkYXRhKG1fY29kZUJsb2NrKSwgb3BlcmF0
aW9uR2V0QnlJZFdpdGhUaGlzT3B0aW1pemUsIHJlc3VsdFZSZWcsIGdlbi5zdHViSW5mbygpLCBK
U1ZhbHVlUmVncyhyZWdUMSwgcmVnVDApLCBKU1ZhbHVlUmVncyhyZWdUNCwgcmVnVDMpLCBpZGVu
dC0+aW1wbCgpKTsKICAgICAKICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGNvbGRQYXRoQmVn
aW4sIGNhbGwpOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX3B1dF9ieV9pZChjb25zdCBJ
bnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewogICAgIC8vIEluIG9yZGVyIHRvIGJl
IGFibGUgdG8gcGF0Y2ggYm90aCB0aGUgU3RydWN0dXJlLCBhbmQgdGhlIG9iamVjdCBvZmZzZXQs
IHdlIHN0b3JlIG9uZSBwb2ludGVyLAogICAgIC8vIHRvIGp1c3QgYWZ0ZXIgdGhlIGFyZ3VtZW50
cyBoYXZlIGJlZW4gbG9hZGVkIGludG8gcmVnaXN0ZXJzICdob3RQYXRoQmVnaW4nLCBhbmQgd2Ug
Z2VuZXJhdGUgY29kZQogICAgIC8vIHN1Y2ggdGhhdCB0aGUgU3RydWN0dXJlICYgb2Zmc2V0IGFy
ZSBhbHdheXMgYXQgdGhlIHNhbWUgZGlzdGFuY2UgZnJvbSB0aGlzLgogICAgIAotICAgIGludCBi
YXNlID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgdmFsdWUgPSBj
dXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwotICAgIGludCBkaXJlY3QgPSBjdXJyZW50
SW5zdHJ1Y3Rpb25bOF0udS5wdXRCeUlkRmxhZ3MgJiBQdXRCeUlkSXNEaXJlY3Q7CisgICAgYXV0
byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRCeUlkPigpOworICAgIGF1
dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spOworICAgIGludCBi
YXNlID0gYnl0ZWNvZGUuYmFzZS5vZmZzZXQoKTsKKyAgICBpbnQgdmFsdWUgPSBieXRlY29kZS52
YWx1ZS5vZmZzZXQoKTsKKyAgICBpbnQgZGlyZWN0ID0gbWV0YWRhdGEuZmxhZ3MgJiBQdXRCeUlk
SXNEaXJlY3Q7CiAgICAgCiAgICAgZW1pdExvYWQyKGJhc2UsIHJlZ1QxLCByZWdUMCwgdmFsdWUs
IHJlZ1QzLCByZWdUMik7CiAgICAgCkBAIC02MzMsMTIgKzY3OSwxMyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9wdXRfYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBtX3B1
dEJ5SWRzLmFwcGVuZChnZW4pOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lk
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKGNvbnN0IElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRl
cmF0b3ImIGl0ZXIpCiB7CiAgICAgbGlua0FsbFNsb3dDYXNlcyhpdGVyKTsKIAotICAgIGludCBi
YXNlID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBjb25zdCBJZGVudGlm
aWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZCkpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24t
PmFzPE9wUHV0QnlJZD4oKTsKKyAgICBpbnQgYmFzZSA9IGJ5dGVjb2RlLmJhc2Uub2Zmc2V0KCk7
CisgICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlmaWVy
KGJ5dGVjb2RlLnByb3BlcnR5KSk7CiAKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luKHRoaXMpOwog
CkBAIC02NTMsMTEgKzcwMCwxMiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZQogICAgIGdlbi5y
ZXBvcnRTbG93UGF0aENhbGwoY29sZFBhdGhCZWdpbiwgY2FsbCk7CiB9CiAKLXZvaWQgSklUOjpl
bWl0X29wX2luX2J5X2lkKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJ
VDo6ZW1pdF9vcF9pbl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9u
KQogewotICAgIGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAg
IGludCBiYXNlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICBjb25zdCBJ
ZGVudGlmaWVyKiBpZGVudCA9ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoY3VycmVudEluc3Ry
dWN0aW9uWzNdLnUub3BlcmFuZCkpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wSW5CeUlkPigpOworICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0
KCk7CisgICAgaW50IGJhc2UgPSBieXRlY29kZS5iYXNlLm9mZnNldCgpOworICAgIGNvbnN0IElk
ZW50aWZpZXIqIGlkZW50ID0gJihtX2NvZGVCbG9jay0+aWRlbnRpZmllcihieXRlY29kZS5wcm9w
ZXJ0eSkpOwogCiAgICAgZW1pdExvYWQoYmFzZSwgcmVnVDEsIHJlZ1QwKTsKICAgICBlbWl0SnVt
cFNsb3dDYXNlSWZOb3RKU0NlbGwoYmFzZSwgcmVnVDEpOwpAQCAtNjcyLDEyICs3MjAsMTMgQEAg
dm9pZCBKSVQ6OmVtaXRfb3BfaW5fYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKICAgICBlbWl0U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwogfQogCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfaW5fYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9p
bl9ieV9pZChjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7CiAKLSAgICBpbnQgcmVzdWx0VlJlZyA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQ7Ci0gICAgY29uc3QgSWRlbnRpZmllciogaWRlbnQgPSAmKG1fY29kZUJsb2NrLT5pZGVudGlm
aWVyKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKTsKKyAgICBhdXRvIGJ5dGVjb2Rl
ID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcEluQnlJZD4oKTsKKyAgICBpbnQgcmVzdWx0VlJl
ZyA9IGJ5dGVjb2RlLmRzdC5vZmZzZXQoKTsKKyAgICBjb25zdCBJZGVudGlmaWVyKiBpZGVudCA9
ICYobV9jb2RlQmxvY2stPmlkZW50aWZpZXIoYnl0ZWNvZGUucHJvcGVydHkpKTsKIAogICAgIEpJ
VEluQnlJZEdlbmVyYXRvciYgZ2VuID0gbV9pbkJ5SWRzW21faW5CeUlkSW5kZXgrK107CiAKQEAg
LTcwNSwxMiArNzU0LDE1IEBAIHZvaWQgSklUOjplbWl0UmVzb2x2ZUNsb3N1cmUoaW50IGRzdCwg
aW50IHNjb3BlLCBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzLCB1CiAgICAgZW1pdFN0b3Jl
KGRzdCwgcmVnVDEsIHJlZ1QwKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3BfcmVzb2x2ZV9zY29w
ZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRfb3BfcmVz
b2x2ZV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAg
IGludCBkc3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBzY29w
ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgUmVzb2x2ZVR5cGUgcmVz
b2x2ZVR5cGUgPSBzdGF0aWNfY2FzdDxSZXNvbHZlVHlwZT4oY3VycmVudEluc3RydWN0aW9uWzRd
LnUub3BlcmFuZCk7Ci0gICAgdW5zaWduZWQgZGVwdGggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNV0u
dS5vcGVyYW5kOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb24tPmFzPE9w
UmVzb2x2ZVNjb3BlPigpOworICAgIGF1dG8mIG1ldGFkYXRhID0gYnl0ZWNvZGUubWV0YWRhdGEo
bV9jb2RlQmxvY2spOworICAgIGludCBkc3QgPSBieXRlY29kZS5kc3Qub2Zmc2V0KCk7CisgICAg
aW50IHNjb3BlID0gYnl0ZWNvZGUuc2NvcGUub2Zmc2V0KCk7CisgICAgUmVzb2x2ZVR5cGUgcmVz
b2x2ZVR5cGUgPSBtZXRhZGF0YS5yZXNvbHZlVHlwZTsKKyAgICB1bnNpZ25lZCBkZXB0aCA9IG1l
dGFkYXRhLmxvY2FsU2NvcGVEZXB0aDsKKwogICAgIGF1dG8gZW1pdENvZGUgPSBbJl0gKFJlc29s
dmVUeXBlIHJlc29sdmVUeXBlKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2ZVR5cGUpIHsKICAg
ICAgICAgY2FzZSBHbG9iYWxQcm9wZXJ0eToKQEAgLTczMyw3ICs3ODUsNyBAQCB2b2lkIEpJVDo6
ZW1pdF9vcF9yZXNvbHZlX3Njb3BlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBNb2R1bGVWYXI6CiAgICAgICAgICAgICBt
b3ZlKFRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgcmVnVDEpOwotICAgICAgICAgICAg
bW92ZShUcnVzdGVkSW1tUHRyKGN1cnJlbnRJbnN0cnVjdGlvbls2XS51LmpzQ2VsbC5nZXQoKSks
IHJlZ1QwKTsKKyAgICAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihtZXRhZGF0YS5sZXhpY2Fs
RW52aXJvbm1lbnQuZ2V0KCkpLCByZWdUMCk7CiAgICAgICAgICAgICBlbWl0U3RvcmUoZHN0LCBy
ZWdUMSwgcmVnVDApOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgRHluYW1pYzoK
QEAgLTgwOSwxMyArODYxLDE1IEBAIHZvaWQgSklUOjplbWl0R2V0Q2xvc3VyZVZhcihpbnQgc2Nv
cGUsIHVpbnRwdHJfdCBvcGVyYW5kKQogICAgIGxvYWQzMihBZGRyZXNzKHJlZ1QwLCBKU0xleGlj
YWxFbnZpcm9ubWVudDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQgKiBzaXplb2YoUmVn
aXN0ZXIpICsgUGF5bG9hZE9mZnNldCksIHJlZ1QwKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3Bf
Z2V0X2Zyb21fc2NvcGUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklU
OjplbWl0X29wX2dldF9mcm9tX3Njb3BlKGNvbnN0IEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCiB7Ci0gICAgaW50IGRzdCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7
Ci0gICAgaW50IHNjb3BlID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICBS
ZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IEdldFB1dEluZm8oY3VycmVudEluc3RydWN0aW9uWzRd
LnUub3BlcmFuZCkucmVzb2x2ZVR5cGUoKTsKLSAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90
ID0gY3VycmVudEluc3RydWN0aW9uWzVdLnUuc3RydWN0dXJlLnNsb3QoKTsKLSAgICB1aW50cHRy
X3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50cHRyX3QqPigmY3VycmVudElu
c3RydWN0aW9uWzZdLnUucG9pbnRlcik7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0
cnVjdGlvbi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRl
Y29kZS5tZXRhZGF0YShtX2NvZGVCbG9jayk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5v
ZmZzZXQoKTsKKyAgICBpbnQgc2NvcGUgPSBieXRlY29kZS5zY29wZS5vZmZzZXQoKTsKKyAgICBS
ZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9IG1ldGFkYXRhLmdldFB1dEluZm8ucmVzb2x2ZVR5cGUo
KTsKKyAgICBTdHJ1Y3R1cmUqKiBzdHJ1Y3R1cmVTbG90ID0gbWV0YWRhdGEuc3RydWN0dXJlLnNs
b3QoKTsKKyAgICB1aW50cHRyX3QqIG9wZXJhbmRTbG90ID0gcmVpbnRlcnByZXRfY2FzdDx1aW50
cHRyX3QqPigmbWV0YWRhdGEub3BlcmFuZCk7CiAgICAgCiAgICAgYXV0byBlbWl0Q29kZSA9IFsm
XSAoUmVzb2x2ZVR5cGUgcmVzb2x2ZVR5cGUsIGJvb2wgaW5kaXJlY3RMb2FkRm9yT3BlcmFuZCkg
ewogICAgICAgICBzd2l0Y2ggKHJlc29sdmVUeXBlKSB7CkBAIC05MDIsMTYgKzk1NiwxNyBAQCB2
b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9zY29wZShJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uKQogICAgICAgICBlbWl0Q29kZShyZXNvbHZlVHlwZSwgZmFsc2UpOwogICAgICAgICBi
cmVhazsKICAgICB9Ci0gICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZSgpOworICAgIGVtaXRWYWx1
ZVByb2ZpbGluZ1NpdGUoYnl0ZWNvZGUubWV0YWRhdGEobV9jb2RlQmxvY2spKTsKICAgICBlbWl0
U3RvcmUoZHN0LCByZWdUMSwgcmVnVDApOwogfQogCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfZ2V0
X2Zyb21fc2NvcGUoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9nZXRfZnJv
bV9zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7CiAKLSAgICBpbnQgZHN0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAg
ICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUob3BlcmF0aW9uR2V0RnJvbVNjb3BlLCBkc3QsIGN1
cnJlbnRJbnN0cnVjdGlvbik7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJbnN0cnVjdGlv
bi0+YXM8T3BHZXRGcm9tU2NvcGU+KCk7CisgICAgaW50IGRzdCA9IGJ5dGVjb2RlLmRzdC5vZmZz
ZXQoKTsKKyAgICBjYWxsT3BlcmF0aW9uV2l0aFByb2ZpbGUoYnl0ZWNvZGUubWV0YWRhdGEobV9j
b2RlQmxvY2spLCBvcGVyYXRpb25HZXRGcm9tU2NvcGUsIGRzdCwgY3VycmVudEluc3RydWN0aW9u
KTsKIH0KIAogdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXJpYWJsZShKU1ZhbHVlKiBvcGVyYW5k
LCBpbnQgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKQEAgLTk0MiwxNCArOTk3LDE2IEBAIHZv
aWQgSklUOjplbWl0UHV0Q2xvc3VyZVZhcihpbnQgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBp
bnQgdmFsdWUsIFdhdGNocG9pbnRTCiAgICAgc3RvcmUzMihyZWdUMiwgQWRkcmVzcyhyZWdUMCwg
SlNMZXhpY2FsRW52aXJvbm1lbnQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5kICogc2l6
ZW9mKFJlZ2lzdGVyKSArIFBheWxvYWRPZmZzZXQpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRfb3Bf
cHV0X3RvX3Njb3BlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit2b2lkIEpJVDo6
ZW1pdF9vcF9wdXRfdG9fc2NvcGUoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKIHsKLSAgICBpbnQgc2NvcGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwot
ICAgIGludCB2YWx1ZSA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgR2V0
UHV0SW5mbyBnZXRQdXRJbmZvID0gR2V0UHV0SW5mbyhjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5v
cGVyYW5kKTsKKyAgICBhdXRvIGJ5dGVjb2RlID0gY3VycmVudEluc3RydWN0aW9uLT5hczxPcFB1
dFRvU2NvcGU+KCk7CisgICAgYXV0byYgbWV0YWRhdGEgPSBieXRlY29kZS5tZXRhZGF0YShtX2Nv
ZGVCbG9jayk7CisgICAgaW50IHNjb3BlID0gYnl0ZWNvZGUuc2NvcGUub2Zmc2V0KCk7CisgICAg
aW50IHZhbHVlID0gYnl0ZWNvZGUudmFsdWUub2Zmc2V0KCk7CisgICAgR2V0UHV0SW5mbyBnZXRQ
dXRJbmZvID0gY29waWVkR2V0UHV0SW5mbyhieXRlY29kZSk7CiAgICAgUmVzb2x2ZVR5cGUgcmVz
b2x2ZVR5cGUgPSBnZXRQdXRJbmZvLnJlc29sdmVUeXBlKCk7Ci0gICAgU3RydWN0dXJlKiogc3Ry
dWN0dXJlU2xvdCA9IGN1cnJlbnRJbnN0cnVjdGlvbls1XS51LnN0cnVjdHVyZS5zbG90KCk7Ci0g
ICAgdWludHB0cl90KiBvcGVyYW5kU2xvdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8dWludHB0cl90Kj4o
JmN1cnJlbnRJbnN0cnVjdGlvbls2XS51LnBvaW50ZXIpOworICAgIFN0cnVjdHVyZSoqIHN0cnVj
dHVyZVNsb3QgPSBtZXRhZGF0YS5zdHJ1Y3R1cmUuc2xvdCgpOworICAgIHVpbnRwdHJfdCogb3Bl
cmFuZFNsb3QgPSByZWludGVycHJldF9jYXN0PHVpbnRwdHJfdCo+KCZtZXRhZGF0YS5vcGVyYW5k
KTsKICAgICAKICAgICBhdXRvIGVtaXRDb2RlID0gWyZdIChSZXNvbHZlVHlwZSByZXNvbHZlVHlw
ZSwgYm9vbCBpbmRpcmVjdExvYWRGb3JPcGVyYW5kKSB7CiAgICAgICAgIHN3aXRjaCAocmVzb2x2
ZVR5cGUpIHsKQEAgLTk4Myw5ICsxMDQwLDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X3RvX3Nj
b3BlKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAgICAgICAgICAgICAgYWRk
U2xvd0Nhc2UoYnJhbmNoSWZFbXB0eShyZWdUMSkpOwogICAgICAgICAgICAgfQogICAgICAgICAg
ICAgaWYgKGluZGlyZWN0TG9hZEZvck9wZXJhbmQpCi0gICAgICAgICAgICAgICAgZW1pdFB1dEds
b2JhbFZhcmlhYmxlSW5kaXJlY3QoYml0d2lzZV9jYXN0PEpTVmFsdWUqKj4ob3BlcmFuZFNsb3Qp
LCB2YWx1ZSwgYml0d2lzZV9jYXN0PFdhdGNocG9pbnRTZXQqKj4oJmN1cnJlbnRJbnN0cnVjdGlv
bls1XSkpOworICAgICAgICAgICAgICAgIGVtaXRQdXRHbG9iYWxWYXJpYWJsZUluZGlyZWN0KGJp
dHdpc2VfY2FzdDxKU1ZhbHVlKio+KG9wZXJhbmRTbG90KSwgdmFsdWUsICZtZXRhZGF0YS53YXRj
aHBvaW50U2V0KTsKICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBlbWl0UHV0R2xv
YmFsVmFyaWFibGUoYml0d2lzZV9jYXN0PEpTVmFsdWUqPigqb3BlcmFuZFNsb3QpLCB2YWx1ZSwg
Y3VycmVudEluc3RydWN0aW9uWzVdLnUud2F0Y2hwb2ludFNldCk7CisgICAgICAgICAgICAgICAg
ZW1pdFB1dEdsb2JhbFZhcmlhYmxlKGJpdHdpc2VfY2FzdDxKU1ZhbHVlKj4oKm9wZXJhbmRTbG90
KSwgdmFsdWUsIG1ldGFkYXRhLndhdGNocG9pbnRTZXQpOwogICAgICAgICAgICAgYnJlYWs7CiAg
ICAgICAgIH0KICAgICAgICAgY2FzZSBMb2NhbENsb3N1cmVWYXI6CkBAIC05OTMsNyArMTA1MCw3
IEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQogICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
OgogICAgICAgICAgICAgZW1pdFdyaXRlQmFycmllcihzY29wZSwgdmFsdWUsIFNob3VsZEZpbHRl
clZhbHVlKTsKICAgICAgICAgICAgIGVtaXRWYXJJbmplY3Rpb25DaGVjayhuZWVkc1ZhckluamVj
dGlvbkNoZWNrcyhyZXNvbHZlVHlwZSkpOwotICAgICAgICAgICAgZW1pdFB1dENsb3N1cmVWYXIo
c2NvcGUsICpvcGVyYW5kU2xvdCwgdmFsdWUsIGN1cnJlbnRJbnN0cnVjdGlvbls1XS51LndhdGNo
cG9pbnRTZXQpOworICAgICAgICAgICAgZW1pdFB1dENsb3N1cmVWYXIoc2NvcGUsICpvcGVyYW5k
U2xvdCwgdmFsdWUsIG1ldGFkYXRhLndhdGNocG9pbnRTZXQpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIGNhc2UgTW9kdWxlVmFyOgogICAgICAgICBjYXNlIER5bmFtaWM6CkBAIC0xMDQx
LDEyICsxMDk4LDEyIEBAIHZvaWQgSklUOjplbWl0X29wX3B1dF90b19zY29wZShJbnN0cnVjdGlv
biogY3VycmVudEluc3RydWN0aW9uKQogICAgIH0KIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29w
X3B1dF90b19zY29wZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90
b19zY29wZShjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQogewogICAgIGxpbmtBbGxTbG93Q2FzZXMoaXRl
cik7CiAKLSAgICBHZXRQdXRJbmZvIGdldFB1dEluZm8gPSBHZXRQdXRJbmZvKGN1cnJlbnRJbnN0
cnVjdGlvbls0XS51Lm9wZXJhbmQpOwotICAgIFJlc29sdmVUeXBlIHJlc29sdmVUeXBlID0gZ2V0
UHV0SW5mby5yZXNvbHZlVHlwZSgpOworICAgIGF1dG8gYnl0ZWNvZGUgPSBjdXJyZW50SW5zdHJ1
Y3Rpb24tPmFzPE9wUHV0VG9TY29wZT4oKTsKKyAgICBSZXNvbHZlVHlwZSByZXNvbHZlVHlwZSA9
IGNvcGllZEdldFB1dEluZm8oYnl0ZWNvZGUpLnJlc29sdmVUeXBlKCk7CiAgICAgaWYgKHJlc29s
dmVUeXBlID09IE1vZHVsZVZhcikgewogICAgICAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhD
YWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX3Rocm93X3N0cmljdF9tb2Rl
X3JlYWRvbmx5X3Byb3BlcnR5X3dyaXRlX2Vycm9yKTsKICAgICAgICAgc2xvd1BhdGhDYWxsLmNh
bGwoKTsKQEAgLTEwNTQsMjQgKzExMTEsMjYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3B1dF90
b19zY29wZShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0MKICAg
ICAgICAgY2FsbE9wZXJhdGlvbihvcGVyYXRpb25QdXRUb1Njb3BlLCBjdXJyZW50SW5zdHJ1Y3Rp
b24pOwogfQogCi12b2lkIEpJVDo6ZW1pdF9vcF9nZXRfZnJvbV9hcmd1bWVudHMoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX2dldF9mcm9tX2FyZ3Vt
ZW50cyhjb25zdCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogewotICAgIGludCBk
c3QgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwotICAgIGludCBhcmd1bWVudHMg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGludCBpbmRleCA9IGN1cnJl
bnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJlbnRJ
bnN0cnVjdGlvbi0+YXM8T3BHZXRGcm9tQXJndW1lbnRzPigpOworICAgIGludCBkc3QgPSBieXRl
Y29kZS5kc3Qub2Zmc2V0KCk7CisgICAgaW50IGFyZ3VtZW50cyA9IGJ5dGVjb2RlLmFyZ3VtZW50
cy5vZmZzZXQoKTsKKyAgICBpbnQgaW5kZXggPSBieXRlY29kZS5pbmRleDsKICAgICAKICAgICBl
bWl0TG9hZFBheWxvYWQoYXJndW1lbnRzLCByZWdUMCk7CiAgICAgbG9hZDMyKEFkZHJlc3MocmVn
VDAsIERpcmVjdEFyZ3VtZW50czo6c3RvcmFnZU9mZnNldCgpICsgaW5kZXggKiBzaXplb2YoV3Jp
dGVCYXJyaWVyPFVua25vd24+KSArIFRhZ09mZnNldCksIHJlZ1QxKTsKICAgICBsb2FkMzIoQWRk
cmVzcyhyZWdUMCwgRGlyZWN0QXJndW1lbnRzOjpzdG9yYWdlT2Zmc2V0KCkgKyBpbmRleCAqIHNp
emVvZihXcml0ZUJhcnJpZXI8VW5rbm93bj4pICsgUGF5bG9hZE9mZnNldCksIHJlZ1QwKTsKLSAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7CisgICAgZW1pdFZhbHVlUHJvZmlsaW5nU2l0ZShi
eXRlY29kZS5tZXRhZGF0YShtX2NvZGVCbG9jaykpOwogICAgIGVtaXRTdG9yZShkc3QsIHJlZ1Qx
LCByZWdUMCk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX3B1dF90b19hcmd1bWVudHMoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0X29wX3B1dF90b19hcmd1
bWVudHMoY29uc3QgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKLSAgICBpbnQg
YXJndW1lbnRzID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICBpbnQgaW5k
ZXggPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGludCB2YWx1ZSA9IGN1
cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgYXV0byBieXRlY29kZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbi0+YXM8T3BQdXRUb0FyZ3VtZW50cz4oKTsKKyAgICBpbnQgYXJndW1lbnRz
ID0gYnl0ZWNvZGUuYXJndW1lbnRzLm9mZnNldCgpOworICAgIGludCBpbmRleCA9IGJ5dGVjb2Rl
LmluZGV4OworICAgIGludCB2YWx1ZSA9IGJ5dGVjb2RlLnZhbHVlLm9mZnNldCgpOwogICAgIAog
ICAgIGVtaXRXcml0ZUJhcnJpZXIoYXJndW1lbnRzLCB2YWx1ZSwgU2hvdWxkRmlsdGVyVmFsdWUp
OwogICAgIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWdpc3RlclNl
dC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZ2lzdGVyU2V0LmNwcAppbmRleCBh
M2VlNzQ3MzdkYTczYmRlMmY1YWRhNzJmZmUzZmU5ZjQxODEwNjkzLi41YmFkM2VmMDZmNWZmNDJl
NzQ0NmUxZDdmYTdmODFjYmExNGY1NDdjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L1JlZ2lzdGVyU2V0LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1Jl
Z2lzdGVyU2V0LmNwcApAQCAtMjAxLDYgKzIwMSw4IEBAIFJlZ2lzdGVyU2V0IFJlZ2lzdGVyU2V0
Ojp2bUNhbGxlZVNhdmVSZWdpc3RlcnMoKQogICAgIHJlc3VsdC5zZXQoRlBSSW5mbzo6ZnBSZWdD
UzUpOwogICAgIHJlc3VsdC5zZXQoRlBSSW5mbzo6ZnBSZWdDUzYpOwogICAgIHJlc3VsdC5zZXQo
RlBSSW5mbzo6ZnBSZWdDUzcpOworI2VsaWYgQ1BVKEFSTV9USFVNQjIpCisgICAgcmVzdWx0LnNl
dChHUFJJbmZvOjpyZWdDUzApOwogI2VuZGlmCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludERhdGEuY3BwIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5jcHAKaW5kZXggMzU5ZDVlZjhmNjU1MzEz
NDRjYjRlNmQ4YjRkY2Y2ODRiMGM2MWMxYi4uZmE5YTdlZDQyYWFmMWFlMzgzZWE1NWE0M2IxYWNm
Y2E3YjViNjBjNyAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50
RGF0YS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50RGF0YS5jcHAK
QEAgLTEzNCw3ICsxMzQsNyBAQCB2b2lkIERhdGE6OnBlcmZvcm1Bc3NlcnRpb25zKFZNJiB2bSkK
ICNpZiBFTkFCTEUoQ19MT09QKQogICAgIEFTU0VSVChDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVD
YWxsZWVTYXZlU3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKSA9PSAxKTsKICNlbGlmIFVTRShKU1ZB
TFVFMzJfNjQpCi0gICAgQVNTRVJUKCFDb2RlQmxvY2s6OmxsaW50QmFzZWxpbmVDYWxsZWVTYXZl
U3BhY2VBc1ZpcnR1YWxSZWdpc3RlcnMoKSk7CisgICAgQVNTRVJUKENvZGVCbG9jazo6bGxpbnRC
YXNlbGluZUNhbGxlZVNhdmVTcGFjZUFzVmlydHVhbFJlZ2lzdGVycygpID09IDEpOwogI2VsaWYg
KENQVShYODZfNjQpICYmICFPUyhXSU5ET1dTKSkgIHx8IENQVShBUk02NCkKICAgICBBU1NFUlQo
Q29kZUJsb2NrOjpsbGludEJhc2VsaW5lQ2FsbGVlU2F2ZVNwYWNlQXNWaXJ0dWFsUmVnaXN0ZXJz
KCkgPT0gNCk7CiAjZWxpZiAoQ1BVKFg4Nl82NCkgJiYgT1MoV0lORE9XUykpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20gYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KaW5kZXgg
MmY5YWU4OGRlYWQxM2Y3YzdlZGMzZjViYTU4OTBlNDYxNjhmOTFlZS4uNjVkNWU4ZDAzZDQ4ZWRl
ZTY2MTJjYTBlNDk4NmM3N2M2NzkyNzdkMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQpAQCAtNTU4LDEwICs1NTgsMTAgQEAg
ZW5kCiAjICAgICAgICAgZW5kCiAjICAgICApCiAjCi1pZiBYODZfNjQgb3IgQVJNNjQgb3IgQVJN
NjRFCitpZiBYODZfNjQgb3IgQVJNNjQgb3IgQVJNNjRFIG9yIEFSTXY3CiAgICAgbWFjcm8gcHJv
YmUoYWN0aW9uKQogICAgICAgICAjIHNhdmUgYWxsIHRoZSByZWdpc3RlcnMgdGhhdCB0aGUgTExJ
bnQgbWF5IHVzZS4KLSAgICAgICAgaWYgQVJNNjQgb3IgQVJNNjRFCisgICAgICAgIGlmIEFSTTY0
IG9yIEFSTTY0RSBvciBBUk12NwogICAgICAgICAgICAgcHVzaCBjZnIsIGxyCiAgICAgICAgIGVu
ZAogICAgICAgICBwdXNoIGEwLCBhMQpAQCAtNTc1LDYgKzU3NSw4IEBAIGlmIFg4Nl82NCBvciBB
Uk02NCBvciBBUk02NEUKICAgICAgICAgICAgIHB1c2ggY3NyNCwgY3NyNQogICAgICAgICAgICAg
cHVzaCBjc3I2LCBjc3I3CiAgICAgICAgICAgICBwdXNoIGNzcjgsIGNzcjkKKyAgICAgICAgZWxz
aWYgQVJNdjcKKyAgICAgICAgICAgIHB1c2ggY3NyMAogICAgICAgICBlbmQKIAogICAgICAgICBh
Y3Rpb24oKQpAQCAtNTg2LDEzICs1ODgsMTUgQEAgaWYgWDg2XzY0IG9yIEFSTTY0IG9yIEFSTTY0
RQogICAgICAgICAgICAgcG9wIGNzcjUsIGNzcjQKICAgICAgICAgICAgIHBvcCBjc3IzLCBjc3Iy
CiAgICAgICAgICAgICBwb3AgY3NyMSwgY3NyMAorICAgICAgICBlbHNpZiBBUk12NworICAgICAg
ICAgICAgcG9wIGNzcjAKICAgICAgICAgZW5kCiAgICAgICAgIHBvcCB0NSwgdDQKICAgICAgICAg
cG9wIHQzLCB0MgogICAgICAgICBwb3AgdDEsIHQwCiAgICAgICAgIHBvcCBhMywgYTIKICAgICAg
ICAgcG9wIGExLCBhMAotICAgICAgICBpZiBBUk02NCBvciBBUk02NEUKKyAgICAgICAgaWYgQVJN
NjQgb3IgQVJNNjRFIG9yIEFSTXY3CiAgICAgICAgICAgICBwb3AgbHIsIGNmcgogICAgICAgICBl
bmQKICAgICBlbmQKQEAgLTc1OSw3ICs3NjMsNyBAQCBtYWNybyByZXN0b3JlQ2FsbGVlU2F2ZXNV
c2VkQnlMTEludCgpCiBlbmQKIAogbWFjcm8gY29weUNhbGxlZVNhdmVzVG9WTUVudHJ5RnJhbWVD
YWxsZWVTYXZlc0J1ZmZlcih2bSwgdGVtcCkKLSAgICBpZiBBUk02NCBvciBBUk02NEUgb3IgWDg2
XzY0IG9yIFg4Nl82NF9XSU4KKyAgICBpZiBBUk02NCBvciBBUk02NEUgb3IgWDg2XzY0IG9yIFg4
Nl82NF9XSU4gb3IgQVJNdjcKICAgICAgICAgbG9hZHAgVk06OnRvcEVudHJ5RnJhbWVbdm1dLCB0
ZW1wCiAgICAgICAgIHZtRW50cnlSZWNvcmQodGVtcCwgdGVtcCkKICAgICAgICAgbGVhcCBWTUVu
dHJ5UmVjb3JkOjpjYWxsZWVTYXZlUmVnaXN0ZXJzQnVmZmVyW3RlbXBdLCB0ZW1wCkBAIC03OTYs
MTIgKzgwMCwxNCBAQCBtYWNybyBjb3B5Q2FsbGVlU2F2ZXNUb1ZNRW50cnlGcmFtZUNhbGxlZVNh
dmVzQnVmZmVyKHZtLCB0ZW1wKQogICAgICAgICAgICAgc3RvcmVxIGNzcjQsIDMyW3RlbXBdCiAg
ICAgICAgICAgICBzdG9yZXEgY3NyNSwgNDBbdGVtcF0KICAgICAgICAgICAgIHN0b3JlcSBjc3I2
LCA0OFt0ZW1wXQorICAgICAgICBlbHNpZiBBUk12NworICAgICAgICAgICAgc3RvcmVwIGNzcjAs
IFt0ZW1wXQogICAgICAgICBlbmQKICAgICBlbmQKIGVuZAogCiBtYWNybyByZXN0b3JlQ2FsbGVl
U2F2ZXNGcm9tVk1FbnRyeUZyYW1lQ2FsbGVlU2F2ZXNCdWZmZXIodm0sIHRlbXApCi0gICAgaWYg
QVJNNjQgb3IgQVJNNjRFIG9yIFg4Nl82NCBvciBYODZfNjRfV0lOCisgICAgaWYgQVJNNjQgb3Ig
QVJNNjRFIG9yIFg4Nl82NCBvciBYODZfNjRfV0lOIG9yIEFSTXY3CiAgICAgICAgIGxvYWRwIFZN
Ojp0b3BFbnRyeUZyYW1lW3ZtXSwgdGVtcAogICAgICAgICB2bUVudHJ5UmVjb3JkKHRlbXAsIHRl
bXApCiAgICAgICAgIGxlYXAgVk1FbnRyeVJlY29yZDo6Y2FsbGVlU2F2ZVJlZ2lzdGVyc0J1ZmZl
clt0ZW1wXSwgdGVtcApAQCAtODM4LDYgKzg0NCw4IEBAIG1hY3JvIHJlc3RvcmVDYWxsZWVTYXZl
c0Zyb21WTUVudHJ5RnJhbWVDYWxsZWVTYXZlc0J1ZmZlcih2bSwgdGVtcCkKICAgICAgICAgICAg
IGxvYWRxIDMyW3RlbXBdLCBjc3I0CiAgICAgICAgICAgICBsb2FkcSA0MFt0ZW1wXSwgY3NyNQog
ICAgICAgICAgICAgbG9hZHEgNDhbdGVtcF0sIGNzcjYKKyAgICAgICAgZWxzaWYgQVJNdjcKKyAg
ICAgICAgICAgIGxvYWRwIFt0ZW1wXSwgY3NyMAogICAgICAgICBlbmQKICAgICBlbmQKIGVuZApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU2FtcGxpbmdQcm9maWxl
ci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNw
cAppbmRleCBlMmE3MzkzZWRhODhlMTFhODJlZjc3MzUxNTk3ODAyNWI0NzA3M2Y5Li41NTFmZTM0
YzRmZGIzNTQzMjFlYjE3OWEwMDRhOWJhZmZjMzg2OTk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TYW1wbGluZ1Byb2ZpbGVyLmNwcApAQCAtNDQwLDcgKzQ0MCw4
IEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIHVuc2lnbmVkIHRyeUdldEJ5dGVjb2RlSW5kZXgodW5z
aWduZWQgbGxpbnRQQywgQ29kZUJsb2NrKiBjCiAgICAgcmV0dXJuIDA7CiAjZWxzZQogICAgIElu
c3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IGJpdHdpc2VfY2FzdDxJbnN0cnVjdGlvbio+KGxsaW50
UEMpOwotICAgIGlmIChpbnN0cnVjdGlvbiA+PSBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJl
Z2luKCkgJiYgaW5zdHJ1Y3Rpb24gPCBjb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmVuZCgpKSB7
CisKKyAgICBpZiAoY29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5jb250YWlucyhpbnN0cnVjdGlv
bikpIHsKICAgICAgICAgaXNWYWxpZCA9IHRydWU7CiAgICAgICAgIHJldHVybiBjb2RlQmxvY2st
PmJ5dGVjb2RlT2Zmc2V0KGluc3RydWN0aW9uKTsKICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V1RGL3d0Zi9QbGF0Zm9ybS5oIGIvU291cmNlL1dURi93dGYvUGxhdGZvcm0uaAppbmRleCBlMmVi
NzViY2RiMzNhNzMxMzY0MDJkY2QwMTJkYTA3NjNmZTY4ZDZlLi5iM2YxMjRkYmJiNTk1YWM0ZTM4
ODU3ZGZkZjg3NDMyOTBjZTQxZTBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9y
bS5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKQEAgLTc1NywxMiArNzU3LDE5IEBA
CiAjZGVmaW5lIEVOQUJMRV9KSVQgMQogI2VuZGlmCiAKLS8qIERpc2FibGUgSklUIGZvciAzMi1i
aXQgYnVpbGRzLiAqLwogI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisjaWYgQ1BVKEFSTV9USFVNQjIp
ICYmIE9TKExJTlVYKQorLyogT24gQVJNdjcvTGludXggdGhlIEpJVCBpcyBlbmFibGVkIHVubGVz
cyBleHBsaWNpdGx5IGRpc2FibGVkLiAqLworI2lmICFkZWZpbmVkKEVOQUJMRV9KSVQpCisjZGVm
aW5lIEVOQUJMRV9KSVQgMQorI2VuZGlmCisvKiBCdXQgc3RpbGwgZGlzYWJsZSBERkcgZm9yIG5v
dy4gKi8KKyN1bmRlZiBFTkFCTEVfREZHX0pJVAorI2RlZmluZSBFTkFCTEVfREZHX0pJVCAwCisj
ZWxzZQorLyogRGlzYWJsZSBKSVQgYW5kIGZvcmNlIENfTE9PUCBvbiBhbGwgMzJiaXQtYXJjaGl0
ZWN0dXJlcyBidXQgQVJNdjctVGh1bWIyL0xpbnV4LiAqLwogI3VuZGVmIEVOQUJMRV9KSVQKICNk
ZWZpbmUgRU5BQkxFX0pJVCAwCi0vKiBGb3JjZSBDX0xPT1Agb24gYWxsIGFyY2hpdGVjdHVyZXMg
YnV0IEFSTXY3LVRodW1iMi9MaW51eC4gKi8KLSNpZiAhKENQVShBUk1fVEhVTUIyKSAmJiBPUyhM
SU5VWCkpCiAjdW5kZWYgRU5BQkxFX0NfTE9PUAogI2RlZmluZSBFTkFCTEVfQ19MT09QIDEKICNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Jc29QYWdlSW5saW5lcy5o
IGIvU291cmNlL2JtYWxsb2MvYm1hbGxvYy9Jc29QYWdlSW5saW5lcy5oCmluZGV4IDBjNDc4NjRj
N2I0OWEwZWVjOGEyNjEwY2VmNjdmYTMyOGE0ZWY0YzQuLjEyYjMxODMwYzIyNWQyZjcwZDQ3MjNh
M2QwMWVlNzgzN2E3NzhlNDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9ibWFsbG9jL2JtYWxsb2MvSXNv
UGFnZUlubGluZXMuaAorKysgYi9Tb3VyY2UvYm1hbGxvYy9ibWFsbG9jL0lzb1BhZ2VJbmxpbmVz
LmgKQEAgLTE4OCw3ICsxODgsNyBAQCBGcmVlTGlzdCBJc29QYWdlPENvbmZpZz46OnN0YXJ0QWxs
b2NhdGluZygpCiAgICAgICAgIGNoYXIqIGNlbGxCeXRlID0gcmVpbnRlcnByZXRfY2FzdDxjaGFy
Kj4odGhpcykgKyBpbmRleCAqIENvbmZpZzo6b2JqZWN0U2l6ZTsKICAgICAgICAgaWYgKHZlcmJv
c2UpCiAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVwOiBwdXR0aW5nICVwIG9uIGZyZWUg
bGlzdC5cbiIsIHRoaXMsIGNlbGxCeXRlKTsKLSAgICAgICAgRnJlZUNlbGwqIGNlbGwgPSByZWlu
dGVycHJldF9jYXN0PEZyZWVDZWxsKj4oY2VsbEJ5dGUpOworICAgICAgICBGcmVlQ2VsbCogY2Vs
bCA9IGJpdHdpc2VfY2FzdDxGcmVlQ2VsbCo+KGNlbGxCeXRlKTsKICAgICAgICAgY2VsbC0+c2V0
TmV4dChoZWFkLCBzZWNyZXQpOwogICAgICAgICBoZWFkID0gY2VsbDsKICAgICAgICAgYnl0ZXMg
Kz0gQ29uZmlnOjpvYmplY3RTaXplOwpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL1dlYktpdEZl
YXR1cmVzLmNtYWtlIGIvU291cmNlL2NtYWtlL1dlYktpdEZlYXR1cmVzLmNtYWtlCmluZGV4IDJk
NTVmOTVhYmFhZjZhZTE1ZTkzYmQ3ZDdlYWFiMGNiOTllODA0ZTIuLjA0YmNmZTQwYzg1MTMyMDc5
NjI0YTZlMmRjYmYyYzBmZGY4Mzk4ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9XZWJLaXRG
ZWF0dXJlcy5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2UvV2ViS2l0RmVhdHVyZXMuY21ha2UKQEAg
LTY4LDEyICs2OCwxMiBAQCBtYWNybyhXRUJLSVRfT1BUSU9OX0JFR0lOKQogICAgICAgICBzZXQo
VVNFX1NZU1RFTV9NQUxMT0NfREVGQVVMVCBPRkYpCiAgICAgICAgIHNldChFTkFCTEVfQ19MT09Q
X0RFRkFVTFQgT0ZGKQogICAgICAgICBzZXQoRU5BQkxFX1NBTVBMSU5HX1BST0ZJTEVSX0RFRkFV
TFQgT04pCi0gICAgZWxzZWlmIChXVEZfQ1BVX0FSTSBBTkQgV1RGX09TX1VOSVgpCi0gICAgICAg
IHNldChFTkFCTEVfSklUX0RFRkFVTFQgT0ZGKQorICAgIGVsc2VpZiAoV1RGX0NQVV9BUk0gQU5E
IFdURl9PU19MSU5VWCkKKyAgICAgICAgc2V0KEVOQUJMRV9KSVRfREVGQVVMVCBPTikKICAgICAg
ICAgc2V0KEVOQUJMRV9GVExfREVGQVVMVCBPRkYpCiAgICAgICAgIHNldChVU0VfU1lTVEVNX01B
TExPQ19ERUZBVUxUIE9GRikKICAgICAgICAgc2V0KEVOQUJMRV9DX0xPT1BfREVGQVVMVCBPRkYp
Ci0gICAgICAgIHNldChFTkFCTEVfU0FNUExJTkdfUFJPRklMRVJfREVGQVVMVCBPRkYpCisgICAg
ICAgIHNldChFTkFCTEVfU0FNUExJTkdfUFJPRklMRVJfREVGQVVMVCBPTikKICAgICBlbHNlICgp
CiAgICAgICAgIHNldChFTkFCTEVfSklUX0RFRkFVTFQgT0ZGKQogICAgICAgICBzZXQoRU5BQkxF
X0ZUTF9ERUZBVUxUIE9GRikKZGlmZiAtLWdpdCBhL0NNYWtlTGlzdHMudHh0IGIvQ01ha2VMaXN0
cy50eHQKaW5kZXggOGUxODBkNGZiMTgyNzE0YzgzM2YzNDE3M2ExNGNjODgwMGM5MThlYi4uZmVh
N2UzMGYyODlhY2M2YWNiMjRiNWRhNmFhOWEyOWExNDUxY2VhNyAxMDA2NDQKLS0tIGEvQ01ha2VM
aXN0cy50eHQKKysrIGIvQ01ha2VMaXN0cy50eHQKQEAgLTExMiw2ICsxMTIsOCBAQCBlbmRpZiAo
KQogaWYgKFVOSVgpCiAgICAgaWYgKEFQUExFKQogICAgICAgICBzZXQoV1RGX09TX01BQ19PU19Y
IDEpCisgICAgZWxzZWlmIChDTUFLRV9TWVNURU1fTkFNRSBNQVRDSEVTICJMaW51eCIpCisgICAg
ICAgIHNldChXVEZfT1NfTElOVVggMSkKICAgICBlbHNlICgpCiAgICAgICAgIHNldChXVEZfT1Nf
VU5JWCAxKQogICAgIGVuZGlmICgpCmRpZmYgLS1naXQgYS9DaGFuZ2VMb2cgYi9DaGFuZ2VMb2cK
aW5kZXggMDA1NTZiYjczN2I3ZmJhY2Q3NTZhNzg2NWU1Nzk3ZDA0MzAxNGNiNy4uYjE3MmY2ZjJl
NjIzMzgzZmI2MTkzMTA1MWRhZDk4MjJhMjE1NjdmOCAxMDA2NDQKLS0tIGEvQ2hhbmdlTG9nCisr
KyBiL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE1IEBACisyMDE4LTExLTIwICBEb21pbmlrIEluZnVl
aHIgIDxkaW5mdWVockBpZ2FsaWEuY29tPgorCisgICAgICAgIEVuYWJsZSBKSVQgb24gQVJNL0xp
bnV4CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xOTE1
NDgKKworICAgICAgICBSZXZpZXdlZCBieSBZdXN1a2UgU3V6dWtpLgorCisgICAgICAgIEVuYWJs
ZSBKSVQgYnkgZGVmYXVsdCBvbiBBUk12Ny9MaW51eCBhZnRlciBpdCB3YXMgZGlzYWJsZWQgd2l0
aAorICAgICAgICByZWNlbnQgYnl0Y29kZSBmb3JtYXQgY2hhbmdlLgorCisgICAgICAgICogU291
cmNlL2NtYWtlL1dlYktpdEZlYXR1cmVzLmNtYWtlOgorCiAyMDE4LTExLTE2ICBEb24gT2xtc3Rl
YWQgIDxkb24ub2xtc3RlYWRAc29ueS5jb20+CiAKICAgICAgICAgQWRkIFVTRShMSUJXUEUpIHRv
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFuZ2VM
b2cKaW5kZXggMjg1OGVhMWZhYzQzNGNlMmU5MGY4YTljNWM4Nzk5OTM2MzM4ODA0MS4uZmI0OTIw
MTg4MTc5MDQ3NzgzMzQ4ZGQ5Mzg1OTVmM2I3YWRjOGZiMCAxMDA2NDQKLS0tIGEvSlNUZXN0cy9D
aGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNSBAQAorMjAxOC0x
MS0yMCAgRG9taW5payBJbmZ1ZWhyICA8ZGluZnVlaHJAaWdhbGlhLmNvbT4KKworICAgICAgICBF
bmFibGUgSklUIG9uIEFSTS9MaW51eAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTkxNTQ4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgWXVzdWtlIFN1enVr
aS4KKworICAgICAgICBEaXNhYmxlIHRlc3Qgb24gc3lzdGVtIHdpdGggbGltaXRlZCBtZW1vcnku
IFByb2dyYW0gd2FzIGtpbGxlZCBieQorICAgICAgICB0aGUgT1MgYmVmb3JlIHRoZSBleGNlcHRp
b24gd2FzIHRocm93bi4KKworICAgICAgICAqIHNsb3dNaWNyb2JlbmNobWFya3MvZnVuY3Rpb24t
Y29uc3RydWN0b3Itd2l0aC1odWdlLXN0cmluZ3MuanM6CisKIDIwMTgtMTEtMTkgIE1hcmsgTGFt
ICA8bWFyay5sYW1AYXBwbGUuY29tPgogCiAgICAgICAgIGdsb2JhbEZ1bmNJbXBvcnRNb2R1bGUo
KSBzaG91bGQgcmV0dXJuIGEgcHJvbWlzZSB3aGVuIGl0IGNsZWFycyBleGNlcHRpb25zLgpkaWZm
IC0tZ2l0IGEvSlNUZXN0cy9zbG93TWljcm9iZW5jaG1hcmtzL2Z1bmN0aW9uLWNvbnN0cnVjdG9y
LXdpdGgtaHVnZS1zdHJpbmdzLmpzIGIvSlNUZXN0cy9zbG93TWljcm9iZW5jaG1hcmtzL2Z1bmN0
aW9uLWNvbnN0cnVjdG9yLXdpdGgtaHVnZS1zdHJpbmdzLmpzCmluZGV4IGM2MTNlZDg0ODNjMTM3
MDRkYjBhMjA2NWY5MmYxMzNhODQ4M2I0ZWUuLjg2NjE3MDU2MTVmODU2N2U1MTk1ZTYwOGMwOTc0
MDZmM2ExMjVkZGEgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvc2xvd01pY3JvYmVuY2htYXJrcy9mdW5j
dGlvbi1jb25zdHJ1Y3Rvci13aXRoLWh1Z2Utc3RyaW5ncy5qcworKysgYi9KU1Rlc3RzL3Nsb3dN
aWNyb2JlbmNobWFya3MvZnVuY3Rpb24tY29uc3RydWN0b3Itd2l0aC1odWdlLXN0cmluZ3MuanMK
QEAgLTEsMyArMSw0IEBACisvL0Agc2tpcCBpZiAkbWVtb3J5TGltaXRlZAogdmFyIGh1Z2VTdHJp
bmcgPSAieCI7CiBmb3IgKGkgPSAwOyBpIDwgMjU7ICsraSkgewogICAgIGh1Z2VTdHJpbmcgKz0g
aHVnZVN0cmluZzsK
</data>

          </attachment>
      

    </bug>

</bugzilla>